dcddc

西米大人的博客

0%

递归与迭代的区别

写算法题解法的博客时,时常想用递归或者迭代来描述解法,但又觉得这两个好像是一个意思。
那是因为我混淆了这两个概念,其有联系,也有区别。

递归

  • 递归就是自己调用自己,但每次调用都会缩小解决问题的范围(体现在参数的变化)
  • 递归必须有递归出口,及递归的终止条件。从终止条件处,再一步步回溯到最外层的调用,输出结果
  • 递归的过程分两部分:从外层函数调用自己,这个过程是由外到内。碰到终止条件,由内层函数一步步return,这个过程由外到内。

迭代

  • 递归的做法里一定包含迭代,但不能反过来说
    • 怎么理解:正如前面将递归分为两个过程,因为迭代不会自己调自己,所以不存在由外到内的过程,只包含由内到外的过程。即,迭代会不停调另一个函数,直到求出结果。

      所以说,递归有迭代的思想,但迭代没有递归的过程。

递归与迭代的代码示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
//这是递归  
int funcA(int n)
{
if(n > 1)
return n+funcA(n-1);
else
return 1;
}
//这是迭代
int funcB(int n)
{
int i,s=0;
for(i=1;i<n;i++)
s+=i;
return s;
}
  • 递归没什么好说的,自己调自己,碰到终止条件,在迭代出结果
  • 迭代的代码其实可以理解为funcB一直在循环里调另一个函数{s+=i},并通过for循环控制迭代次数。类比递归,区别是递归里的迭代,调的是自己,由最外层调用的参数控制迭代次数