递归,递推,迭代的含义
递归:程序调用自己的编程技巧叫做递归。递归做为一种算法在程序设计语言中广泛应用。 一个过程或函数在其定义
或说明中有直接或间接调用自身的一种方法,它通常把一个大型复杂的问题层层转化为一个与原问题相似的规模较小
的问题来求解,递归策略只需少量的程序就可描述出解题过程所需要的多次重复计算,大大地减少了程序的代码量。
递推:递推算法是一种用若干步可重复的简运算(规律)来描述复杂问题的方法。递推是序列计算机中的一种常用算
法。它是按照一定的规律来计算序列中的每个项,通常是通过计算机前面的一些项来得出序列中的指定象的值。
迭代:迭代是重复反馈过程的活动,其目的通常是为了逼近所需目标或结果。每一次对过程的重复称为一次“迭代”,
而每一次迭代得到的结果会作为下一次迭代的初始值。
这三个词的含义给人感觉很相近,而我在也找了很多关于这三个的解释,但是依然没有让我能直接区分他们(特别是
递推和迭代)。这里我用自己的理解把它们区分一下。
递归与递推的区别
递归整体是分为两步的:1.向下递推直到限制条件到了。
2.回溯结果。
而递推就是从初始态出发,不断改变自己的过程。
如:我想让1+2+4+...+64;
递归是由最终态向前递推,即:
<span style="font-size:14px;">#include<stdio.h>
int solve(int n)
{
if(n == 1)
return 1;
return n+solve(n/2);
}
int main()
{
printf("%d\n",solve(64));
return 0;
}
</span>
而若只用递推则是:
<span style="font-size:14px;">#include<stdio.h>
int solve(int n)
{
int i = 1;
while(i <= 64)
{
n += i;
i = i*2;
}
return n;
}
int main()
{
printf("%d\n",solve(0));
return 0;
}
</span>
递归是在不断的调用自己,从最终态不断找到最初态,然后不断回溯的过程。
递推是没有回溯这个过程的。
迭代和递推十分接近(甚至我就认为它们是一个意思)
在国外的书中iterative会被翻译为迭代,即反复的(递推也是反复的过程)。
而在英语中,递推和递归放在了一起。递推也有正向递推和反向递推(递归)的说法。
因此,我认为在谈到递归时,相对应的是将递推和迭代相同处理,而在说递推和迭代的区别时,递推可看作是能正向
递推和反向递推的.
以上纯个人观点,如有错误,请在评论区指出,我一定及时回复。