【发布时间】:2011-11-14 06:08:18
【问题描述】:
这是我的代码。
递归:
#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(iowreturn tailcalled(foo);)。
标签: c recursion iteration tail-recursion