什麼是遞歸?面試
在函數的內部調用本身函數
下面有一個例子,經過這個例子,你們就能夠了解什麼是遞歸spa
function fun(){ console.log(new Date()) //獲取當前時間,並在控制檯打印出來 setTimeout(fun,1000) //定時器,調用fun函數,1s調用一次 } fun()
就這樣結果在控制檯每隔一秒打印一次。3d
在面試中,面試官,若是問js中遞歸的問題,通常都是問階乘和斐波那契數列。code
下面,我將介紹階乘和斐波那契數列用遞歸如何作blog
1. 階乘遞歸
首先,咱們得先了解階乘的規律:n!= n * (n-1)!ci
function fun(n){ if(n == 1 || n == 0){ return 1; } return n * fun(n-1) } document.write(fun(10));
結果以下:數學
咱們只需更改調用函數中的實參,就能夠知曉每個數的階乘。it
不過,值得注意的是,階乘是從0開始的,也就是說負數是沒有階乘的,並且0的階乘是1,所以,在fun函數中,加了判斷條件,當n爲0或1是,直接返回1;下面的代碼就不用執行了。
2. 斐波那契數列
什麼是斐波那契數列?
斐波那契數列(Fibonacci sequence),又稱黃金分割數列、因數學家列昂納多·斐波那契(Fibonacci sequence)以兔子繁殖爲例子而引入,故又稱爲「兔子數列」,指的是這樣一個數列:一、一、
二、三、五、八、1三、2一、3四、........在數學上,斐波納契數列以以下被以遞推的方法定義:F(1)=1,F(2)=1, F(n)=F(n-1)+F(n-2)(n>=3,n∈N*)
有了數列和規律,咱們就能夠寫了
function fun(n){ if(n == 1 || n == 2){ return 1; } return fun(n-1) + fun(n-2) } document.write(fun(9));
結果以下:
基本上,遞歸就結束了。