This question already has answers here:
Implicit int return value of C function
(7个答案)
3年前关闭。
我想出了以下代码来计算斐波那契数列。
我的主要问题是,为什么它返回正确的值?如果在
我还想知道使用普通递归算法相对于此算法是否有任何优势?
递归方法虽然很棒,但它会占用大量内存,并且迭代选项似乎无法有效地解决斐波那契数列。
基于“ c / c ++”。 Deitel&Deitel
(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