迭代

迭代是一种不断用变量的旧值递推新值的过程。

迭代算法是计算机解决问题的一种基本方法。它从一个初始变量值出发,让计算机对一组指令(或一定步骤)进行重复执行,每次执行这组指令(或步骤)时,都从变量的原值推出它的一个新值。最终得到所求解。

迭代的步骤

(1)确定迭代变量

在可以用迭代算法解决的问题中,至少存在一个直接或间接地不断由旧值递推出新值的变量,这个变量就是迭代变量。

一般在确定迭代变量的同时,还要指定其初始值。

(2)建立迭代关系式

所谓迭代关系式,是指如何从变量的前一个值推出其下一个值的公式(或关系)。迭代关系式的建立是解决迭代问题的关键,通常可以顺推或倒推的方法来完成。

(3)对迭代过程进行控制

        什么时候结束迭代过程?这是编写迭代程序必须考虑的问题。根据算法“有限性”的性质,不能让迭代过程无休止地重复执行下去。

        迭代过程的控制通常有两种情况:

a. 所需的迭代次数是个确定的值,可以计算出来。

F可以构建一个固定次数的循环来实现对迭代过程的控制。(常用for语句)

b. 所需的迭代次数开始时无法确定。

F需要进一步分析出用来结束迭代过程的条件。例如,当计算精度满足要求后结束。(常用while语句)

e.g.

古角猜想

  日本数学家角谷静夫在研究自然数时发现了一个奇怪现象:

           对于任意一个自然数 n ,若 n 为偶数,则将其除以 2 ;若 n 为奇数,则将其乘以 3 ,然后再加 1 。如此经过有限次运算后,总可以得到自然数 1 。

     要求:写出算法,由键盘输入一个自然数 n ,把 n 经过有限次运算后,最终变成自然数 1 的全过程打印出来。

递推

设要求问题规模为n的解,当n=1时,解已知或能方便得到,根据递推关系,能从i-1规模的解,推出i规模的解(i=2、3、……、n),这就是递推。当然也可以反过来,从n、n-1、……、3、2反推到1。

递推的步骤

(1)建立递推关系

从变量的前一些值推出其下一个值的公式或关系。这是解决递推问题的关键。

(2)确定初始(边界)条件

根据问题最简单的情景确定其初始数据

(3)对递推过程进行控制

 

e.g.

 杨辉三角形 

杨辉三角,是二项式系数在三角形中的一种几何排列,中国南宋数学家杨辉1261年所著的《详解九章算法》一书中出现:


第k行有k个数;

每行的首尾两数均为1;

除首尾两数外,其余各数均为上一行肩上两数之和。

递推与迭代

递推的过程实际上就是迭代的过程,即不断用变量的旧值推出新值的过程。

一般递推使用数组(列表),在循环处理时利用其下标的变化实现变量的迭代,而狭义的迭代是指使用简单变量来完成这一过程。