斐波那契问题:
非递归解决方法:
void FaboLoop(int n)
{
int a=0;
int b=1;
int c;
int i;
if(n==0)
{
c=1;
}
else
{
if(n==1) c=1;
else
{
for(i=2;i<=n;i++)
{
c=a+b;
a=b;
b=c;
}
}
}
printf("%d\n",c);
}
尾递归方法:
int FaboTailRec(int n, int a, int b)
{
if (n==0)
{
return a;
}
return FaboTailRec(n-1, b, a+b);
}
问题:我想找到根据非递归循环来转换成尾递归的一种方法,而上面非递归循环的方法中就用了三个参数,所以我想写一个尾递归是采用a,b,c三个参数,而不是上面两个参数的,即FaboTailRec(n, a, b,c),但是遇到了问题,
非递归中:
c=a+b;先执行这一句,于是FaboTailRec(n-1, , ,a+b);第
三个参数确定
a=b; 再执行这句,是给a赋值,但是形参是从右到左入栈的,也就是说第二个修改的值应
该是b,但是这里要修改的是a,问题就在这里!
所以,请告诉我怎么解决这个问题,或者跟我说说循环怎么转换为尾递归的技巧
我自己也写了个:
int FaboTailRec(int n, int b, int a, int c)
{
if (n==0)
{
return a;
}
return FaboTailRec(n-1, c, b, a+b);
}
这是我自己写的,但是不对,问题就在参数的传递方面,但是不知道怎么解决
你这个int FaboTailRec(int n, int b, int a, int c)方法目的何在啊??是做什么的啊 ??都不讲清楚
是你自己没看清楚