读书人

递归转非递归了解

发布时间: 2013-10-22 16:16:51 作者: rapoo

递归转非递归理解

可以使用下面这几种方法来实现递归到非递归的转换.

(1) 循环方法
循环方法是所有递归到非递归的转换中最理想的方法,可以将开销减少到最小.
不过也是分析起来最复杂的,对于简单的递归可以用这样的方法来处理.
例如:Factorial计算
这里回到n!(阶乘)定义上面来分析,这里将n!数学意思为n! = n*(n-1)! & 1!=1;做一个扩展可以到到n!另外一个表示方法n! = n*(n-1)*(n-2)*....*1;
这样就可以很容易得到另外一个定义:
n!表示执行n次循环计算一个增量k,初始k=1和结果t=1;每次t乘以k++的值.
ISO C++实现代码如下:

Factorial(int n){   Stack s;   int t = 1;//临时变量   s.push(n);   while(s.top()!=1)[      t *= s.top();      s.push(s.top()-1);      s.pop();   }   return t;}

除了上面这两种方法外,还可以使用一种迭代的方法实现递归到非递归的处理.




读书人网 >编程

热点推荐