递归转非递归理解
可以使用下面这几种方法来实现递归到非递归的转换.
(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;}除了上面这两种方法外,还可以使用一种迭代的方法实现递归到非递归的处理.