首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

递归和迭代的区别(2)

递归和迭代的区别(2)

1,2部分摘自网络,略有改动,向原作者致敬!
3.个人总结

定义

优点

缺点

递归
程序调用自身的编程技巧称为递归
1)大问题化为小问题,可以极大的减少代码量;
2)用有限的语句来定义对象的无限集合.;
3)代码更简洁清晰,可读性更好
1)递归调用函数,浪费空间;
2)递归太深容易造成堆栈的溢出;

迭代
利用变量的原值推算出变量的一个新值,迭代就是A不停的调用B.
1)迭代效率高,运行时间只因循环次数增加而增加;
2)没什么额外开销,空间上也没有什么增加,
1) 不容易理解;
2) 代码不如递归简洁;
3) 编写复杂问题时困难。
二者关系
1) 递归中一定有迭代,但是迭代中不一定有递归,大部分可以相互转换。
2) 能用迭代的不用递归,递归调用函数,浪费空间,并且递归太深容易造成堆栈的溢出./*相对*/

举例如下:
[cpp]   


  • #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;  
  • }
返回列表