3、个人总结

 

 

?

定义

优点

缺点

递归

程序调用自身的编程技巧称为递归

1)大问题化为小问题,可以极大的减少代码量;

2)用有限的语句来定义对象的无限集合.;

3)代码更简洁清晰,可读性更好

1)递归调用函数,浪费空间;

2)递归太深容易造成堆栈的溢出;

?

迭代

利用变量的原值推算出变量的一个新值,迭代是A不停的调用B.

1)迭代效率高,运行时间只因循环次数增加而增加;

2)没什么额外开销,空间上也没有什么增加,

1)不容易理解;

2)代码不如递归简洁;

3)编写复杂问题时困难。

二者关系

1)递归中一定有迭代,但是迭代中不一定有递归,大部分可以相互转换。

2)能用迭代的不用递归,递归调用函数,浪费空间,并且递归太深容易造成堆栈的溢出./*相对*/

 

  举例如下:
 

 

#include <iostream>
using namespace std;

//迭代实现斐波那契数列
long fab_iteration(int index)
{
 if(index == 1 || index == 2)
 {
  return 1;
 }
 else
 {
  long f1 = 1L;
  long f2 = 1L;
  long f3 = 0;
  for(int i = 0; i < index-2; i++)
  {  
   f3 = f1 + f2; //利用变量的原值推算出变量的一个新值
   f1 = f2;
   f2 = f3;
  }
   return f3;
 }
}

//递归实现斐波那契数列
 long fab_recursion(int index)
 {   
 if(index == 1 || index == 2)
 {
  return 1;
 }
 else
 {
  return fab_recursion(index-1)+fab_recursion(index-2);    //递归求值
 }
}

int main(int argc, char* argv[])
{
 cout << fab_recursion(10) << endl;
 cout << fab_iteration(10) << endl;
 return 0;
}