消除递归的方法

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

posted @ 2015-08-21 19:33  Lammy  阅读(3183)  评论(0编辑  收藏  举报