大学IT网 - 最懂大学生的IT学习网站! QQ资料交流群:367606806
当前位置:大学IT网 > C++技巧 > 什么是迭代跟递归算法?二者有什么区别?

什么是迭代跟递归算法?二者有什么区别?(1)

关键词:递归有什么区别算法迭代  阅读(1878) 赞(10)

[摘要]本文是对什么是迭代跟递归算法?二者有什么区别?的讲解,对学习C++编程技术有所帮助,与大家分享。

迭代算法是用计算机处置效果的一种基本方法。它运用计算机运算速度快、适合做重复性操作的特点,让计算机对一组指令(或一定步骤)中止重复执行,在每次执行这组指令(或这些步骤)时,都从变量的原值推出它的一个新值。

运用迭代算法处置效果,需求做好以下三个方面的义务:

一、确定迭代变量。在可以用迭代算法处置的效果中,至少存在一个直接或直接地不时由旧值递推出新值的变量,这个变量就是迭代变量。

二、树立迭代关系式。所谓迭代关系式,指如何从变量的前一个值推出其下一个值的公式(或关系)。迭代关系式的树立是处置迭代效果的关键,通常可以运用递推或倒推的方法来完成。

三、对迭代进程中止控制。在什么时分终了迭代进程?这是编写迭代顺序必需思索的效果。不能让迭代进程无休止地重复执行下去。迭代进程的控制通常可分为两种情况:一种是所需的迭代次数是个确定的值,可以计算出来;另一种是所需的迭代次数无法确定。关于前一种情况,可以构建一个固定次数的循环来完成对迭代进程的控制;关于后一种情况,需求进一步分析出用来终了迭代进程的条件。

例 1 : 一个饲养场引进一只刚出生的新品种兔子,这种兔子从出生的下一个月末尾,每月重生一只兔子,重生的兔子也如此繁衍。假定一切的兔子都不死去,问到第 12 个月时,该饲养场共有兔子多少只?

分析: 这是一个典型的递推效果。我们不妨假定第 1 个月时兔子的只数为 u 1 ,第 2 个月时兔子的只数为 u 2 ,第 3 个月时兔子的只数为 u 3 ,……根据题意,“这种兔子从出生的下一个月末尾,每月重生一只兔子”,则有

以下是引用片段:
u 1 = 1 , u 2 = u 1 + u 1 × 1 = 2 , u 3 = u 2 + u 2 × 1 = 4 ,……

根据这个规律,可以归结出下面的递推公式:

以下是引用片段:
  u n = u n - 1 × 2 (n ≥ 2)

对应 u n 和 u n - 1 ,定义两个迭代变量 y 和 x ,可将上面的递推公式转换成如下迭代关系:

以下是引用片段:
  y=x*2
  x=y

让计算机对这个迭代关系重复执行 11 次,就可以算出第 12 个月时的兔子数。参考顺序如下:

以下是引用片段:
  cls
  x=1
  for i=2 to 12
  y=x*2
  x=y
  next i
  print y
  end

例 2 : 阿米巴用复杂分裂的方式繁衍,它每分裂一次要用 3 分钟。将若干个阿米巴放在一个盛满营养参液的容器内, 45 分钟后容器内充溢了阿米巴。已知容器最多可以装阿米巴 2 20 个。试问,末尾的时分往容器内放了多少个阿米巴?请编顺序算出。

分析: 根据题意,阿米巴每 3 分钟分裂一次,那么从末尾的时分将阿米巴放入容器里面,到 45 分钟后充溢容器,需求分裂 45/3=15 次。而“容器最多可以装阿米巴 2 20 个”,即阿米巴分裂 15 次以后失掉的个数是 2 20 。标题要求我们计算分裂之前的阿米巴数,不妨运用倒推的方法,从第 15 次分裂之后的 2 20 个,倒推出第 15 次分裂之前(即第 14 次分裂之后)的个数,再进一步倒推出第 13 次分裂之后、第 12 次分裂之后、……第 1 次分裂之前的个数。

设第 1 次分裂之前的个数为 x 0 、第 1 次分裂之后的个数为 x 1 、第 2 次分裂之后的个数为 x 2 、……第 15 次分裂之后的个数为 x 15 ,则有

以下是引用片段:
  x 14 =x 15 /2 、 x 13 =x 14 /2 、…… x n-1 =x n /2 (n ≥ 1)

由于第 15 次分裂之后的个数 x 15 是已知的,假定定义迭代变量为 x ,则可以将上面的倒推公式转换成如下的迭代公式:

x=x/2 ( x 的初值为第 15 次分裂之后的个数 2 20 )

让这个迭代公式重复执行 15 次,就可以倒推出第 1 次分裂之前的阿米巴个数。由于所需的迭代次数是个确定的值,我们可以运用一个固定次数的循环来完成对迭代进程的控制。参考顺序如下:

以下是引用片段:
  cls
  x=2^20
  for i=1 to 15
  x=x/2
  next i
  print x
  end

«上一页12345下一页»


相关评论