首页 > 其他 > 详细

消除递归的方法

时间:2015-08-21 21:06:28      阅读:233      评论:0      收藏:0      [点我收藏+]

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页。

消除递归的方法

原文:http://www.cnblogs.com/bokeofzp/p/4748833.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!