斐波那契数列
什么是斐波那契数列:
斐波那契数列(Fibonacci sequence),又称黄金分割数列、因数学家列昂纳多·斐波那契(Leonardoda Fibonacci)以兔子繁殖为例子而引入,故又称为“兔子数列”,指的是这样一个数列:1、1、2、3、5、8、13、21、34、……在数学上,斐波纳契数列以如下被以递归的方法定义:F(0)=1,F(1)=1, F(n)=F(n-1)+F(n-2)(n>2,n∈N*)
接下来展示如何用JavaScript函数斐波那契数列第N个数的值
计算的核心,其实是把最近的两个数求和
递归(普通版)
function Fibonacci (n) { if ( n <= 1 ) {return 1}; return Fibonacci(n - 1) + Fibonacci(n - 2); }
递归(尾调用)
function Fibonacci2 (n , ac1 = 1 , ac2 = 1) { if( n <= 1 ) {return ac2}; return Fibonacci2 (n - 1, ac2, ac1 + ac2); }
循环版
unction Fibonacci3(n){ if (n===1 || n===2) { return 1; } let ac1 = 1, ac2 = 1; for (let i = 2; i < n; i++){ [ac1, ac2] = [ac2, ac1 + ac2]; } return ac2; }
generator版
function* fibonacci() { let [prev, curr] = [1, 1]; while (true) { [prev, curr] = [curr, prev + curr]; yield curr; } } function Fibonacci(n){ if (n===1 || n===2) { return 1; } let ac = 0; const fibo = fibonacci(); for (let i = 2;i < n; i++) { ac = fibo.next() } return ac.value; }