斐波那契!递归printf

时间:2012-01-20 14:56:18

标签: c recursion variable-assignment fibonacci

我被要求这样做:

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 个答案:

答案 0 :(得分:2)

像这样?

#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();
}

答案 1 :(得分:0)

我认为你要做的是:

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);
    }
}

递归函数就像任何其他函数一样:如果它返回一些东西,它必须对所有情况都这样做。您只在某些条件下返回了一个值,因此您调用了未定义的行为。