从前有座山,山里有座庙,庙里有个和尚,和尚在讲故事,从前有座山...

588 阅读1分钟

一说起递归我相信每个程序猿都不陌生,说个耳熟能详的小故事从前有座山,山里有座庙,庙里有个和尚,和尚在讲故事,从前有座山,山里有座庙,庙里有个和尚,和尚在讲故事,从前有座山...

还有你从两面相对的镜子中看到的画面,其实都是抽象出来的递归现象,但是严格来说并不是递归,因为会一直重复下去,没有终止条件,那就称为死循环了。

递归的应用场景:

斐波那契数列

function fn(n){
    if(n<0) throw new Error('输入数字不能小于0')
    if(n==1||n==2){
        return 1
    }else{
        return fn(n-1)+fn(n-2)
    }
}

小科普:斐波那契数列又被称为黄金分割数列,指的是这样的一个数列:1,1,2,3,5,8,13,21,34....,它有如下递推的方法定义:F(1)=1,F(2)=1,F(n)=F(n-1)+F(n-2)(n>=2,n是正整数)

循环与递归

简单来说,循环是有去无回,而递归则是有去有回(因为存在终止条件)。

举个栗子,你用你手中的钥匙打开一扇门,结果去发现前方还有一扇门,紧接着你又用钥匙打开了这扇门,然后你又看到一扇们...但是当你开到某扇门时,发现前方是一堵墙无路可走了,你选择原路返回——这就是递归

但是如果你打开一扇门后,同样发现前方也有一扇们,紧接着你又打开下一扇门...直到打开最后一扇门出去,或者一直没有碰到尽头 (死循环)——这就是循环。