消除递归的方法_递归转非递归

1. 栈结构

利用栈来人工模拟系统堆栈的操作过程,其实这种方法本质上还是递归,只不过本来计算机帮你完成的事由你自己做了,所以这对算法的优化效果不明显。

2. 尾递归消除法

如果递归函数是尾递归(在函数末尾递归调用本函数的方式,且递归调用语句只有一个),就可以很容易的将递归消除,用推导出来的数学公式代替。 其效率与循环的代码执行效率基本上是相当的。其优化主要是对栈内空间的优化,这个优化是O(n)到O(1)的;至于时间的优化,其实是由于对空间的优化导致内存分配的工作减少所产生的,并不会带来质的飞跃。下面是尾递归的形式:

int function(int n){
     
	if(n==0) 
		return 1;
	else 
		return function(n-1)
}

3. 迭代法(辗转法)

是一种不断用变量的旧值递推新值的过程。主要是利用计算机运算速度块、适合做重复性操作的特点,让计算机对一组指令(或步骤)进行重复循环执行,在每次执行这些指令(操作)时,都从变量的原值退出它的一些新值。迭代好复杂>_<,每次都搞昏了头。
在用迭代时,需要注意:

  • 确定迭代变量
  • 确立迭代关系式
  • 对迭代过程进行控制

你可能感兴趣的:(算法)