一般递归实现 :

  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);
}

裴波那契数列 JavaScript 尾递归实现的更多相关文章

  1. 剑指offer例题——裴波那契数列

    编程题:大家都知道裴波那契数列,现在要求输入一个整数n,请你输出裴波那契数列的第n项(从0开始,第0项为0).n<=39 public class Solution { public int F ...

  2. 浅谈矩阵加速——以时间复杂度为O(log n)的算法实现裴波那契数列第n项及前n之和使用矩阵加速法的优化求法

    首先请连矩阵乘法乘法都还没有了解的同学简单看一下这篇博客: https://blog.csdn.net/weixin_44049566/article/details/88945949 首先直接暴力求 ...

  3. [矩阵乘法]裴波拉契数列III

    [ 矩 阵 乘 法 ] 裴 波 拉 契 数 列 I I I [矩阵乘法]裴波拉契数列III [矩阵乘法]裴波拉契数列III Description 求数列f[n]=f[n-1]+f[n-2]+1的第N ...

  4. [矩阵乘法]裴波拉契数列II

    [ 矩 阵 乘 法 ] 裴 波 拉 契 数 列 I I [矩阵乘法]裴波拉契数列II [矩阵乘法]裴波拉契数列II Description 形如 1 1 2 3 5 8 13 21 34 55 89 ...

  5. 剑指Offer之裴波那契数列

    题目描述 大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0,第1项是1). n<=39 解法1:递归解法 public int Fibonacc ...

  6. 斐波那契数列 递归 尾递归 递推 C++实现

    ==================================声明================================== 本文原创,转载请注明作者和出处,并保证文章的完整性(包括本 ...

  7. python实现裴波那契数列

    def Fib(n): ''' 假定序号为0或者1,返回1,序号为2时返回2 ''' before = 1 after = 1 for i in range(n): before, after = a ...

  8. Python小代码_11_生成小于 n 的裴波那契数列

    def fib(n): a, b = 1, 1 while a < n: print(a, end=' ') a, b = b, a + b fib(100000) #输出结果 #1 1 2 3 ...

  9. 2.裴波那契(Fibonacci)数列

    裴波那契(Fibonacci)数列 f(n)= ⎧⎩⎨0,1,f(n−1)+f(n−2),n =0n =1n>1 求裴波那契数列的第n项.(题目来自剑指offer) 1.递归解法,效率很低的解法 ...

随机推荐

  1. ES配置文件参考与参数详解

    cluster.name: data-cluster node.name: "data-es-05" #node.data: false # Indexing & Cach ...

  2. [转]SRTM、ASTER GDEM等全球数字高程数据(DEM)下载方式简介

    之前写过一篇短文对比过几种数字高程数据的区别:5种全球高程数据对比,这篇文章简要介绍下如何下载这些数据.       1.DLR的数字高程数据.该数据也是SRTM(shuttle radar topo ...

  3. [CareerCup] 5.6 Swap Odd and Even Bits 交换奇偶位

    5.6 Write a program to swap odd and even bits in an integer with as few instructions as possible (e. ...

  4. 对于AP中为什么有4个WEP KEY的分析

    这篇文章简要分析一下为什么有4个WEP KEY,及其中的一些原因. SPEC 用过AP的都知道,AP中有4个WEP KEY,但是为什么要设置4个呢,这个是WEP帧的格式决定的: 图中的keyid是2个 ...

  5. Stack around the variable 'szStr' was corrupted.

    错误:stack around the variable “XX” was corrupted.,中文翻译就是“在变量XX周围的堆栈已损坏”. 把 project->配置属性->c/c++ ...

  6. 浅谈JS事件冒泡

    今天要跟大家谈的是事件冒泡,这个事件呢,也是两面性的,有时候给我们带来bug,有时候优点也很明显.我们就一起来看看它的真面目.  首先看看事件冒泡是什么? 事件冒泡 :当一个元素接收到事件的时候 会把 ...

  7. php mysqli扩展之预处理

    在前一篇 mysqli基础知识中谈到mysqli的安装及基础操作(主要是单条sql语句的查询操作),今天介绍的是mysqli中很重要的一个部分:预处理. 在mysqli操作中常常涉及到它的三个主要类: ...

  8. IT男的”幸福”生活"续8

    有段时间没写了,还是有点怀念的.   生活不记录下,怕真地会忘.. 以往的种种,时时刻刻回荡在我的脑海中,  最近看着孩子生活照, 猛得回首我便回了到了 续8. …… 坐在回去的公交车上,看着前面两M ...

  9. 第十六课:一些奇葩的元素节点object,video

    object元素 object这个元素,现在前端很少用到,但是像flash,svg等奇葩元素,必须嵌套在object对象元素中.现代浏览器用video,canvas代替这些元素. 之前做过图表和地图的 ...

  10. Xamarin.Forms——WebView技术研究

    在Xamarin中有一些Forms原生不太好实现的内容可以考虑使用HTML.Javascript.CSS那一套前端技术来实现,使用WebView来承载显示本地或网络上的HTML文件.不像OpenUri ...