递归,递推,迭代的含义
2016-10-12 21:18
239 查看
递归,递推,迭代的含义
递归:程序调用自己的编程技巧叫做递归。递归做为一种算法在程序设计语言中广泛应用。 一个过程或函数在其定义或说明中有直接或间接调用自身的一种方法,它通常把一个大型复杂的问题层层转化为一个与原问题相似的规模较小
的问题来求解,递归策略只需少量的程序就可描述出解题过程所需要的多次重复计算,大大地减少了程序的代码量。
递推:递推算法是一种用若干步可重复的简运算(规律)来描述复杂问题的方法。递推是序列计算机中的一种常用算
法。它是按照一定的规律来计算序列中的每个项,通常是通过计算机前面的一些项来得出序列中的指定象的值。
迭代:迭代是重复反馈过程的活动,其目的通常是为了逼近所需目标或结果。每一次对过程的重复称为一次“迭代”,
而每一次迭代得到的结果会作为下一次迭代的初始值。
这三个词的含义给人感觉很相近,而我在也找了很多关于这三个的解释,但是依然没有让我能直接区分他们(特别是
递推和迭代)。这里我用自己的理解把它们区分一下。
递归与递推的区别
递归整体是分为两步的: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会被翻译为迭代,即反复的(递推也是反复的过程)。而在英语中,递推和递归放在了一起。递推也有正向递推和反向递推(递归)的说法。
因此,我认为在谈到递归时,相对应的是将递推和迭代相同处理,而在说递推和迭代的区别时,递推可看作是能正向
递推和反向递推的.
以上纯个人观点,如有错误,请在评论区指出,我一定及时回复。
相关文章推荐
- 递推、递归与迭代的本质,以及,辗转相除与斐波那契的惊人相似性
- 累加、迭代、递推、穷举、递归 ,等运算,笔记
- 循环(迭代/递推)与递归
- (区别)递归与迭代&&递归与递推&&迭代与递推
- 格雷码的几种实现方式 递归 迭代 递推
- 递归,递推,迭代的区别
- 递归,递推,迭代区别:
- 常见算法—累积累加、迭代、递推、递归
- 7、递归思想和迭代思想(递推思想)
- 二叉树的镜像--递归和迭代分别实现
- 递归与迭代
- c# fibnacci(递归,迭代)
- 二叉树的遍历(递归与迭代)
- 函数递归 迭代
- [转]在计算机程序中,完成重复的任务有两种方式:递归和迭代(循环)。
- Java将递归改成迭代的通用方法
- 递推与递归
- 递归与递推 - 青蛙过河
- 递归计算过程和迭代计算过程
- 二分查找的递归实现和迭代实现