This question already has answers here:
Implicit int return value of C function
                                
                                    (7个答案)
                                
                        
                                3年前关闭。
            
                    
我想出了以下代码来计算斐波那契数列。
我的主要问题是,为什么它返回正确的值?如果在a==1时添加一行告诉它返回结果,我会理解获得正确的返回值,但是就这样,我无法解决。
我还想知道使用普通递归算法相对于此算法是否有任何优势?

int calculate(int a,int result,int old)
{

    if (a>0)
    {
        printf("%d ",result);
        return calculate (a-1,result+old,result);
    }

}

int main()
{
    int number,choice;
    printf("To start from 0 enter 0. To start from one enter any other number.\n");
    scanf("%d",&choice);
    printf ("Choose the number of times you wish to go for.\n");
    scanf("%d",&number);
    if (choice==0)
    {
        printf("Result= %d",calculate(number,0,1));
        return 0;
    }
    printf("Result= %d",calculate(number,1,0));

    return 0;

}

最佳答案

建议在这种情况下接收一个值并返回一个值。您可以将代码简化如下:

/*Recursive fibonacci function*/
#include <stdio.h>

long fibonacci(int);

int main()
{

    long result;
    int number;

    printf("Enter an interger: ");
    scanf("%d", &number);
    result = fibonacci(number);
    printf("Fibonacci(%d) = %ld\n", number, result);

    getchar();
    return 0;


}

//Recursive definition of function fibonacci
long fibonacci(int n)
{
   if( n == 0 || n == 1)
       return ((long) n);
   else
       return fibonacci(n - 1) + fibonacci(n - 2);
}


递归方法虽然很棒,但它会占用大量内存,并且迭代选项似乎无法有效地解决斐波那契数列。

基于“ c / c ++”。 Deitel&Deitel

10-06 05:06
查看更多