一般递归实现 :

  1. //经典递归
  2. function fibonacci(n) {
  3. return (function(n) {
  4. if (n == 1 || n == 2)
  5. return 1;
  6. return arguments.callee(n - 1) + arguments.callee(n - 2);
  7. })(n);
  8. }

或者:

function fibonacci(n){

  if(n<2)

  return n;

  else

    return fibonacci(n-1)+fibonacci(n-2);

}

尾递归实现:

  1. //尾递归
  2. function fibonacci(n){
  3. return (function(n1, n2, i){
  4. return (i < n) ? arguments.callee(n2, n1+n2, i+1) : n1;
  5. })(1,1,1);
  6. }

跟这样的迭代方法是完全等价的:

  1. //等价的循环
  2. function fibonacci(n){
  3. var n1 = n2 = s = i = 1;
  4. for(; i<n; i++){
  5. s = n1 + n2;
  6. n1 = n2;
  7. n2 = s;
  8. }
  9. return n1;
  10. }

C# 版:

传统的递归方式如下:

public static int FibonacciRecursively(int n)
{
if (n < 2) return n;
return FibonacciRecursively(n - 1) + FibonacciRecursively(n - 2);
}

而改造成尾递归,我们则需要提供两个累加器:

public static int FibonacciTailRecursively(int n, int acc1, int acc2)
{
if (n == 0) return acc1;
return FibonacciTailRecursively(n - 1, acc2, acc1 + acc2);
}

最新文章

  1. JS继承之原型继承
  2. 为什么 Java 8 中不再需要 StringBuilder 拼接字符串
  3. php sleep()的实时输出打印,清除ob缓冲区
  4. chrome浏览器首页被hao123劫持解决办法
  5. 【转】CentOS6.3安装Broadcom无线网卡驱动
  6. VR制作的规格分析
  7. Hibernate中的一对一映射
  8. Oracle VM Virtual Box 4.3 小巧精悍的虚拟机软件
  9. oc语言学习之基础知识点介绍(三):类方法、封装以及继承的介绍
  10. optimize table-2
  11. Java:Date、Calendar、Timestamp的使用
  12. jsRender模板引擎
  13. protubuffer for windows配置指南!
  14. java配置文件的读写
  15. 短视频服务大PK,阿里云、腾讯云、又拍云、七牛云、金山云5强横向对比
  16. POJ 2449 Dijstra + A* K短路
  17. [maven(1)]myeclipse2014下如何配置maven
  18. [物理学与PDEs]第1章习题9 磁偶极矩的极限矢势
  19. .NET Core 全新认识(转载)
  20. python学习之struct模块

热门文章

  1. Hello,cnblog‘s world!
  2. 在opencv3中进行图片人脸检测
  3. 淘宝SKU组合查询算法实现
  4. IOS开发之——友盟社会化分享UMSocial_SDK的使用
  5. 20145208 《Java程序设计》第9周学习总结
  6. sql server 使用函数辅助查询
  7. Linq之IQueryable接口与IEnumberable区别
  8. Moqui学习Day1
  9. java编程
  10. Kettle_设置全局变量