您的位置:首页 > 其它

消除递归的方法

2015-08-21 19:33 260 查看
1、若递归是尾递归,那利用循环就可以消除,尾递归是是在函数末尾递归调用本函数的方式,满足以下格式:

int  function(int n){

if(n==0)

return 1;

else
return function(n-1);

}


  尾递归采用循环,利用n=1的结果,定义一个变量记res记住,然后循环慢慢算n=2、3....的结果,每次计算出n的值后都让res记住,每次计算function的值利用res计算,下面给出计算一个例子

#include <stdio.h>

//递归的方法
int fib(int n)
{
if(n==1)
return 1;
if(n==0)
return 0;
else
return fib(n-1)+fib(n-2);

}
非递归的方法
int fib2(int n)
{
if(n==1)
return 1;
else if(n==0)
return 0;
int fib0=0;
int fib1=1;
int result=0;
for(int x=2;x<=10;x++)
{
result=fib0+fib1;
fib0=fib1;
fib1=result;
}
return result;
}

void main()
{

int a=fib(10);
int b=fib2(10);

printf("a的值是:%d\n",a);
printf("b的值是:%d\n",b);

}


  2、若不是非递归就需要基于栈来消除递归,详细过程可见:耿国华 ,数据结构129页。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: