博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
递归的代价
阅读量:7236 次
发布时间:2019-06-29

本文共 1017 字,大约阅读时间需要 3 分钟。

  递归函数调用将涉及一些运行时开销——参数必须压到堆栈中,为局部变量分配内存空间,寄存器的值必须保存等。当递归函数的每次调用返回时,上述这些操作必须还原,恢复成原来的样子。递归计算阶乘并没有简化问题

long factorial ( int n ){      if ( n <= 0 )            return 1;      else            return n * factorial ( n - 1 )}
long factorial ( int n ){      int result = 1;      while ( n > 1 )      {             result *= n;             n--;      }      return result;}

  另一个例子,斐波那契数列,数列中每个数的值就是它前面两个数的和,使用递归计算的额外代价非常大,每个递归调用都触发另外两个递归调用,而这两个调用的任何一个还将触发两个递归调用,再接下去的调用也是如此。这样冗余计算的数量增长的非常快。例如计算Fibonacci(10)时,Fibonacci(3)的值被计算了21次,在递归计算Fibonacci(30)时,Fibonacci(3)的值计算了317811次,除了其中之一,其余纯属浪费。

/*迭代法计算第n个斐波那契数的值*/long fibonacci ( int n ){     long result;     long previous_result;     long next_older_result;        result = previous_result = 1;     while ( n > 2 )     {            n--;            next_older_result = previous_result ;            previous_result  = result ;            result = previous_result  + next_older_result ;     }     return result;}

转载于:https://www.cnblogs.com/wh5313/archive/2012/06/12/2546471.html

你可能感兴趣的文章
shell编程进阶
查看>>
12.15-Linux目录结构
查看>>
运维自动化、虚拟化
查看>>
关于 UIImageView的旋转
查看>>
用户的相关命令
查看>>
Linux 20180412 隐藏权限lsattr_chattr等
查看>>
JavaScript 引入页面
查看>>
群集架构篇
查看>>
选择固态硬盘有哪些注意的事项
查看>>
数澜天湛分享:地产大数据下一站——数据中台
查看>>
物联网在车联网中的应用
查看>>
移动互联网时代考勤管理的新模式
查看>>
【响应式】基本概念&设计技巧&开发流程&经验技巧&实例参考
查看>>
objective-c设计模式之---工厂方法和抽象工厂
查看>>
什么是数据湖?有什么用?终于有人讲明白了……
查看>>
易天光通信10G SFP+光模块系列分类
查看>>
U盘格式化后数据恢复,格式化后能恢复吗
查看>>
pop3协议capa指令总结
查看>>
有序线性表的有序合并
查看>>
Windows2003无法连接远程桌面问题 解决方法!
查看>>