递归和迭代的区别
-
递归定义:程序调用自身的编程技巧称为递归。它把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解,递归策略只需少量的程序就可描述出解题过程所需要的多次重复计算
-
迭代定义:迭代时重复反馈过程的活动,其目的通常时为了逼近所需目的或结果。每一次对过程的重复称为一次迭代,而每一次迭代得到的结果会作为下一次迭代的初始值
-
从字面来理解递归就是重复地推进和回归,而迭代就是从初始状态开始每一次遍历后更新状态
-
先说说递归的一些简单实例:
//以下是一个用递归阶乘的实例
#include<stdio.h>
int cal(int num){
if(num==1){
return 1;
}
if(num==0){
return 0;
}
return num*cal(num-1); //此处开始自身调用
}
int main(){
int num;
printf("Please enter a number:");
scanf("%d",&num);
printf("%d",cal(num));
}
//再来一个斐波那契数列的递归函数
#include<stdio.h>
int cal(int n){
if(n<=2){
return 1;
}
return cal(n-1)+cal(n-2);
}
对此,总结一下递归三个要素:明确功能、寻找结束条件、找出函数等价关系
- 接下来看看迭代的实例吧:
//还是以斐波那契数列来举例子
#include<stdio.h>
int fib(int n){
int i,t1=1,t2=1,t3;
if(n<=1){
return n;
}
for(i=2;i<=n;i++){
t3=t1+t2;
t1=t2;
t2=t3;
}
return t3;
}
对此可以说迭代就是一种不断用变量的旧值递推出新值得过程,一般会用一个计数器来判断是否结束迭代
- 在实际开发中,递归会比较耗费时间和内存,而迭代比递归要少占用一些,所以当循环次数比较多时,迭代的效率明显高于递归的效率
- 当然,如果更通俗地说,递归可以是你让一个人去办事,这个人又叫了另一个比较擅长的人去办这件事,而那个人又叫了更擅长的另一个人去办事,依此类推最后找到最合适的人
- 迭代就是你挑了一个又一个人去办事,一直找新的人直到最后找到合适的人