这是我的代码。递归,尾递归和迭代
递归:
#include <stdio.h>
int Recursion(int m,int n)
{
if(m==0 || n==0)
return 1;
else
return 2*Recursion(m-1,n+1);
}
void main()
{
int m,n,result;
m=3;
n=-2;
result=Recursion(m, n);
printf("%d",result);
}
迭代
#include <stdio.h>
int Recursion(int m,int n)
{
int returnvalue=1;
while(m!=0 && n!=0)
{
returnvalue=returnvalue*2;
m--; n++;
}
return returnvalue;
}
void main()
{
int m,n,result;
m=3;
n=-2;
result=Recursion(m,n);
printf("%d",result);
}
现在我的疑惑是:
- ,我读了从递归改为迭代,你需要使用一个栈,并保持推迟数据并在稍后弹出。现在我在这里看不到。为什么?什么时候使用堆栈,什么时候不使用?
- 我的翻译版本是否正确?这尾巴是递归的,因为
Recursion
代码的来源是这样说的。 - 如何从递归版本更改为迭代版本。我真的需要一个很好的来源,我可以从这里学习。谷歌搜索没有多大帮助。
您的尾部递归是错误的。尾递归函数调用只能在'return'之前发生(iow'return tailcalled(foo);')。 – leppie