递归函数和斐波那契数列

261 阅读2分钟

递归

什么是递归?

递归就是一个函数在它的函数体内调用它自身。执行递归函数将反复调用其自身,每调用一次就进入新的一层。递归函数必须有结束条件
当函数在一直递推,直到遇到墙后返回,这个墙就是结束条件
所以递归要有两个要素,结束条件与递推关系

递归的时候,每次调用一个函数,计算机都会为这个函数分配新的空间,这就是说,当被调函数返回的时候,调用函数中的变量依然会保持原先的值,否则也不可能实现反向输出。

案例:
 //5+4+3+2+1的和
     function fn(n){
        if(n == 1) return 1
        return n * fn(n-1)
    }
    fn(5)
    let result = fn(5)
    console.log(result);

程序在计算求和的时候,先执行递推,当n=1的时候返回1,再回推将计算并返回。由此可以看出递归函数必须有结束条件

递归思维图

递归思维图.png

斐波那契数列

什么是斐波那契数列?

百度一下: 斐波那契数列(Fibonacci sequence),又称黄金分割数列,因数学家莱昂纳多·斐波那契(Leonardo Fibonacci)以子繁殖为例子而引入,故又称为“兔子数列”,指的是这样一个数列:1、1、2、3、5、8、13、21、34、……在数学上,斐波那契数列以如下被以递推的方法定义:F(0)=0,F(1)=1, F(n)=F(n - 1)+F(n - 2)(n ≥ 2,n ∈ N*)在现代物理、准晶体结构、化学等领域,斐波那契数列都有直接的应用,为此,美国数学会从 1963 年起出版了以《斐波那契数列季刊》为名的一份数学杂志,用于专门刊载这方面的研究成果。 [1] 

求第n项的斐波那契数,就是就n项的前两项相加,前一项是n-1,前两项就是n-2。 第n项斐波那契数就是(n-1) + (n-2),这样我们就可以使用递归。


function f(n) {
//斐波那契数列前两项都是1,所以判断n是否等于1或者2,如果是则直接返回1
        if (n == 1 || n == 2) {
            return 1
        } else {
            return f(n - 1) + f(n - 2)
        }
    }
    let a = f(8)
    console.log(a); // 21

思维导图

思维导图.png