前言
前言
众所周知,算法+数据结构=程序
因此算法和数据结构是信息技术学习中的重中之重,本文就介绍了递归算法和迭代算法的区别和联系。
一、迭代算法
1、迭代算法思想
让计算机重复执行一组指令(或一些步骤),这组指令(或这些步骤)每执行一次,都会让变量从原值递推出一个新值。
2、利用迭代算法处理问题,需要做好以下三个方面的工作
1)确定迭代变量
在能够用迭代算法处理的问题中,至少具有一个间接或间接地不断由旧值递推出新值的变量,这个变量就是迭代变量。
2)建立迭代关系式
所谓迭代关系式,指如何从变量的前一个值推出其下一个值的公式(或关系)。迭代关系式的建立是处理迭代问题的关键,通常能够使用递推或倒推的方法来完成。
3)对迭代过程进行控制
在什么时候结束迭代过程这是编写迭代程序必须考虑的问题。不能让迭代过程无休止地重复执行下去。迭代过程的控制通常可分为两种情况:一种是所需的迭代次数是个确定的值,能够计算出来;另一种是所需的迭代次数无法确定。对于前一种情况,能够建立一个固定次数的循环来实现对迭代过程的控制;对于后一种情况,需要进一步分析出用来结束迭代过程的条件。
二、递归算法
1、什么是递归?
程序调用自身的编程技巧称为递归。递归作为一种算法在程序设计语言中广泛应用一个过程或函数在其定义或说明中有直接或间接调用自身的一种方法,它通常把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解,递归策略只需少量的程序就可描述出解题过程所需要的多次重复计算,大大地减少了程序的代码量。
2、能采用递归算法解决的问题特征
为求解规模为 N 的问题,设法将它分解成规模较小的问题;
然后从这些小问题的解中方便地构造出大问题的解,并且这些规模较小的问题也能采用同样的分解和综合方法。
当递归到达某个边界,能直接得到解。
3、递归算法思想
递归是指在函数的定义中调用函数自身的方法,这里的调用分两种:直接调用与间接调用。递归就是有去有回:“有去”指递归问题必须可以分解为若干个规模较小且与原问题形式相同的子问题,这些子问题可以用相同的解题思路来解决;“有回”指这些问题的演化过程是一个从大到小,由近及远的过程,并且存在一个明确的终点(临界点),一旦到达这个临界点就不用再往更小、更远的地方走下去。最后,从这个临界点开始,原路返回到原点,解决原问题。
4、典型的递归例子
1、递归求斐波那契数列(Fibonacci sequence)
又称黄金分割数列,因数学家莱昂纳多·斐波那契(Leonardo Fibonacci)以兔子繁殖为例子而引入,故又称“兔子数列”,其数值为:1、1、2、3、5、8、13、21、34……在数学上,这一数列以如下递推的方法定义:F(0)=1,F(1)=1, F(n)=F(n - 1)+F(n - 2)(n ≥ 2,n ∈ N*)。
# 生成斐波那契数列是一个经典的递归问题
def f(n):
if n==1 or n==2:
return 1
return f(n-1) + f(n-2)
2、递归求最大公约数
# 递归求最大公约数
def gcd(m,n):
if n==0:
return m
else:
return gcd(n,m%n)