函式中用呼叫函式自己,此時就是遞迴,遞迴一定要有結束條件
function f1() ;
f1();//瀏覽器崩潰,因為沒有結束條件——死迴圈
改進如下:
var i=0;
function f1()
console.log("從前有座山,山里有個廟,廟裡有個老和尚給小和尚講故事:");
};f1();
遞迴實現:求n個數字的和 n=5 ------->5+4+3+2+1
//for 迴圈寫法:
var sum=0;
for (var i=0;i<=5;i++)
console.log(sum);
----------------------分割線---------------------------
function getsum(x)
return x+getsum(x-1);
};var sum1=getsum(5);
console.log(sum1);
console.log(getsum(10));
執行過程:
**執行getsum(5)—>進入函式,此時的x是5,執行的是5+getsum(4),此時**等待
此時5+getsum(4),**先不進行計算,先執行getsum(4),進入函式,執行的是4+getsum(3),等待, 先執行的是getsum(3),進入函式,執行3+getsum(2),等待,先執行getsum(2),進入函式,執行 2+getsum(1);等待, 先執行getsum(1),執行的是x==1的判斷,return 1,所以,
此時getsum(1)的結果是1,開始向外走出去
2+getsum(1) 此時的結果是:2+1
執行:getsum(2)---->2+1
3+getsum(2) 此時的結果是3+2+1
4+getsum(3) 此時的結果是4+3+2+1
5+getsum(4) 此時的結果是5+4+3+2+1
結果:15
再來幾個:
//遞迴案例:求乙個數字各個位數上的數字的和: 123 --->6 ---1+2+3
//523
function geteverysum(x)
//獲取的是這個數字的個位數
return x%10+geteverysum(parseint(x/10));
}console.log(geteverysum(1364));//5
//遞迴案例:求斐波那契數列
function getfib(x)
return getfib(x-1)+getfib(x-2);
}console.log(getfib(12));
遞迴的用法
遞迴是一種方法內呼叫自身方法的一種程式設計技術,像一些階乘 求和等數學問題可以實現,不過複雜度會提高,最能體現遞迴之美的當屬漢諾塔問題。同樣我們用遞迴實現了斐波那契數列和三角數字。漢諾塔問題 如下圖所示,要求將乙個座上的盤子全部搬運到最後乙個支柱上,有乙個輔助支柱。搬運規則 1.一次只能移動一張盤子...
遞迴的幾種用法
以前一直對遞迴發怵,一想到它就 渾身哆嗦 但是遞迴確實是非常精髓和精妙的,有時候處理問題會非常的方便。比如排序,遍歷目錄下的檔案什麼的,但是老這麼怕他也不是個辦法.先看乙個排序的 現有122345六個數,要求用乙個main函式實現所有不同的排序並列印出來,要求 4不能在第三位,3和5不能相連 某公司...
模式匹配演算法以及KMP的javascript實現
暴力解決 對主串的每乙個字元作為子串開頭,與要匹配的字串進行匹配。對主串作大迴圈,每個字元開頭做t的長度的小迴圈,直到匹配成功或全部遍歷完為止。function index s,t else if j t.length else function getnext t else return next...