遞歸是什么?
每一個小勾勾在學習代碼的時候,就會遇到一個怎么想都很費解的攔路虎。遞歸。
培訓班的老師,視頻講解者,用各種方法來告訴你遞歸是一個什么玩意兒。
但是,你就是理解困難。所以,如果用一個傻逼都能懂的方式,來講解遞歸這種東西。既能造福新手,也能顯得我比較的屌。
來,開始講。
理解遞歸的前提是什么?函數
函數,函數是一個什么東西?
函數就像是一個電燈的開關。你按下開關(調用函數),你就不用考慮,電流是怎么傳遞的,電燈泡的結構是什么樣子的,你要的是最后的一個結果。燈亮了。
所以,在你調用函數的時候,對你來說,最重要的是,獲得一個結果。我調用了一個函數,整個小區全部停電了,是一個結果。我調用了來一個函數,然后世界末日,小星星撞擊地球,人類滅亡,這也是一個結果。
讓我們來一點代碼。(js代碼)
function gan( ){};
這是一個看起來很普通的函數。
function gan(){
return “gan ni x”;
}
然后我們來一個變量。
var say;
然后
say = gan();
然后我們再打印出來。
console.log(say)
然后就會打印
gan ni x
這句臟話從什么地方而來?從函數gan而來。gan做了什么事情,讓這句話能夠傳遞給其變量呢?
使用了return。
所以,return的含義就非常非常非常簡單了。返回一個可以拿來用的結果。這就像你投幣買一瓶可樂。你可以直接喝可樂,你也可以拿這瓶百事可樂當凳子,踩在腳下去買你夠不到的可口可樂。
你可以拿return給你的東西做各種你能做到的事情。
---------------------------------------------------冷靜一下的分割線----------------------------------------------------
在我們明白了函數和return之后。我們就可以在這個兩個玩意的基礎之上來學習遞歸了。
遞歸是個啥?遞歸是函數調用自己。
這特么的函數自己調用自己是什么鬼?自己給自己那啥那啥?
先冷靜一下。
先來一個簡單的例子。
function ?ha(num) {
If(num == 1) {
return 1;
}else {
return num + ha(num-1)
}
}
ha(5);
等等,這特么哪里簡單了?
其實很簡單的。讓我們像電腦一樣去思索這個函數怎么運行的。
從函數調用開始。
Ha(5);
num這個時候等于5。
function ?ha(5) {
If(5== 1) {//條件不成立 不執行return 1。
return 1;
}else {//執行這一段返回語句
return 5 + ha(5-1) ?//執行這一句會發生什么?
}
}
return 5 + ha(5-1);
這句話啥意思?
這句話的意思是,函數執行了一次之后。返回給你一個結果。
這個結果是5 +一個要執行的函數(結果)。
然后我們就跳到這個要執行的函數之中。
目前內存之中存放著這樣有趣的場景。
5 + function ?ha(4) {
If(4== 1) {不滿足條件,不執行這個
return 1;
}else {所以執行
return 4+ ha(4-1)
}
}
就變成了5 +執行的結果(4+ha(3))
5+4+ha(3);
接下來像猴子一樣思索。
再執行一次就變成了
5+4+3+ha(2)
5+4+3+2+ha(1)
5+4+3+2+ha(1) {
If(1== 1) {滿足條件,執行這個
return 1;
}else {
return 4+ ha(4-1)
}
}
就變成了5 + 4 + 3 + 2 + 1
這個時候是不是感覺超級容易了呢。