标签:存在 return 斐波那契数 需要 优化 int 就会 计算 ||
int fibo(int n)
{
if(n == 1 || n == 2)
return 1;
return fibo(n-1)+fibo(n-2);
}
int main()
{
int n,result;
printf("请输入:");
scanf("%d",&n);
result = fibo(n);
printf("%d\n",result);
}
递归代码简洁,但是如果不做一定的优化,很容易出现栈溢出。以上的实现就会非常耗费内存,因为当n>2时,fibo函数需要调用自身n-2次才开始有返回值,然后开逐个返回原函数并开始计算。如果要求的n值非常大的话,可能需要同时保存成千上百个调用记录,很容易发生"栈溢出"错误(stack overflow)。
int fibo(int n,int i,int j)
{
if(n ==1 || n ==2)
return j;
return fibo(n-1,j,j+i);
}
int main()
{
int n,result;
printf("请输入:");
scanf("%d",&n);
result = fibo(n,1,1);
printf("%d\n",result);
}
这样一来,当fibo函数调用自身,就开始有return值,在递归结束后不用再把return值逐个返回原函数。尾递归的实现方式,编译器可以帮我们节省大量的内存消耗,妈妈再也不用我的栈溢出了!
标签:存在 return 斐波那契数 需要 优化 int 就会 计算 ||
原文地址:https://www.cnblogs.com/tansss/p/12507644.html