迭代

1484 2021-01-04 10:00

  迭代是重复反馈过程的活动,其目的通常是为了逼近所需目标或结果。每一次对过程的重复称为一次“迭代”,而每一次迭代得到的结果会作为下一次迭代的初始值。
  重复执行一系列运算步骤,从前面的量依次求出后面的量的过程。此过程的每一次结果,都是由对前一次所得结果施行相同的运算步骤得到的。例如利用迭代法*求某一数学问题的解。
  对计算机特定程序中需要反复执行的子程序*(一组指令),进行一次重复,即重复执行程序中的循环,直到满足某条件为止,亦称为迭代。

  代,是一代人,是一套系统的一个时代,是一个人的时代。迭,就是再来。在其上覆盖。

  代、代入,将上一次迭的结果代入下一次初始化中。

所以一定有人死。谁死、什么留下来、什么继续活动。这就是你的格局。每一次细微的变化就是细节。什么能成功?没有细节上的改变就不会成功。什么是格局,如果没有质的变化,迭代就没有意义。

递归、迭代都可以用循环。但是两者是有区别的。递归是缩小范围,去追寻。迭代是演算推进一个结果。

 

如果一个函数中所有递归形式的调用都出现在函数的末尾,我们称这个递归函数是尾递归的。当递归调用是整个函数体中最后执行的语句且它的返回值不属于表达式的一部分时,这个递归调用就是尾递归。尾递归函数的特点是在回归过程中不用做任何操作,这个特性很重要,因为大多数现代的编译器会利用这种特点自动生成优化的代码。

尾递归是(递归)函数在返回值或者不返回值的调用中,不掺杂其他杂质,仅仅靠函数本身迭代的一种把操作放到尾部进行的递归。

以下是具体实例:
线性递归:
1
2
3
4
5
long Rescuvie(long n) {
 
    return (n == 1) ? 1 : n * Rescuvie(n - 1);
 
}
尾递归:
1
2
3
4
5
6
7
8
9
10
11
12
long TailRescuvie(long n, long a) {
 
    return (n == 1) ? a : TailRescuvie(n - 1, a * n);
 
}
 
 
long TailRescuvie(long n) {//封装用的
     
    return (n == 0) ? 1 : TailRescuvie(n, 1);
 
}
当n = 5时
对于线性递归, 他的递归过程如下:
Rescuvie(5)
{5 * Rescuvie(4)}
{5 * {4 * Rescuvie(3)}}
{5 * {4 * {3 * Rescuvie(2)}}}
{5 * {4 * {3 * {2 * Rescuvie(1)}}}}
{5 * {4 * {3 * {2 * 1}}}}
{5 * {4 * {3 * 2}}}
{5 * {4 * 6}}
{5 * 24}
120
对于尾递归, 他的递归过程如下:
TailRescuvie(5)
TailRescuvie(5, 1)
TailRescuvie(4, 5)
TailRescuvie(3, 20)
TailRescuvie(2, 60)
TailRescuvie(1, 120)
120

全部评论

·