Фибоначчи! Рекурсивный принт - PullRequest
1 голос
/ 20 января 2012

Меня попросили сделать это:

Please input Number: 4
+-+-+-+
+
+
+-+
+
Total is 5

Другие примеры "

Please input Number: 5
+-+-+-+-+
+
+
+-+
+
+
+-+-+
+
+
total is  8

Пока эта проблема сводит меня с ума. Я занимался кодированием и исследованием того, как работает Фибоначчи, выясняя закономерность.

Лучший код, который я когда-либо придумал, это:

#include <stdio.h>
#include <conio.h>

int fibo(int condition)
{
    if(condition <= 2)
    {
        return printf("+");
    }
    else
    {
        printf("+");
        printf("-");
        printf("\n");
        fibo(condition - 2) + fibo(condition - 1);
    }
}


int main()
{
    int takeNumber;

    printf("Please give a number!\n");
    scanf("%d",&takeNumber);
    fibo(takeNumber);
    getch();
}

Он был очень строг в отношении "единственного правила рекурсии"

Я смущен и расстроен, я не знаю, должен ли я разделить "+", "-" и "prinf (" \ n ");". Я попробовал это и получил ошибку переполнения стека.

Трудно было изучить закономерность, кто-нибудь может мне помочь?

Ответы [ 2 ]

2 голосов
/ 20 января 2012

как это?

#include <stdio.h>
#include <conio.h>

int fibo(int condition)
{
    if(condition < 2)
    {
        printf("+\n");
        return 1;
    }
    else
    {
        int n0,n1;
        printf("+-");
        n1 = fibo(condition - 1);
        n0 = fibo(condition - 2);
        return  n0 + n1;
    }
}


int main()
{
    int takeNumber;

    printf("Please input Number: ");
    scanf("%d",&takeNumber);
    printf("Total is %d\n", fibo(takeNumber));
    getch();
}
0 голосов
/ 20 января 2012

Я думаю, что вы пытаетесь сделать, это:

int fibo (int n)
{
    printf("%d ", n);  // replace this with fancy + printing...

    if(n <= 2)
    {
        return n;
    }
    else
    {
        return fibo(n- 2) + fibo(n- 1);
    }
}

Рекурсивная функция аналогична любой другой функции: если она возвращает что-то, она должна делать это для всех случаев. Вы вернули значение только в некоторых условиях и поэтому вызвали неопределенное поведение.

...