遞迴的本質就是使用函式自身來解決問題的思路。
程式呼叫自身的程式設計技巧稱為遞迴( recursion)。遞迴做為一種演算法在程式語言中廣泛應用。 乙個過程或函式在其定義或說明中有直接或間接呼叫自身的一種方法,它通常把乙個大型複雜的問題層層轉化為乙個與原問題相似的規模較小的問題來求解,遞迴策略只需少量的程式就可描述出解題過程所需要的多次重複計算,大大地減少了程式的**量。遞迴的能力在於用有限的語句來定義物件的無限集合。一般來說,遞迴需要有邊界條件、遞迴前進段和遞迴返回段。當邊界條件不滿足時,遞迴前進;當邊界條件滿足時,遞迴返回。
1. 子問題須與原始問題為同樣的事,且更為簡單。
2. 不能無限制地呼叫本身,須有個出口,化簡為非遞迴狀況處理。
有一堆桃子,猴子每天吃一半扔乙個,第六天剩餘1個,問開始有多少桃子
如果用for迴圈來解決問題,我們需要定義乙個迴圈,迴圈六次,也就是六天,迴圈(前一天數量=當天數量加一乘以二),得出結果。
//遞迴//當天數量=(下一天數量+1)*2
//函式明確:給乙個天數,返回該天剩餘數量
在這裡我們首先要明確:當天的數量=(下一天數量+1)*2
然後明確函式:給乙個天數,返回該天剩餘的數量
如果天數是6,返回1。
返回:當天數量=(下一天數量+1)*2
//天數3,開始第一次計算函式執行時,ts=3,然後進入函式function shuliang(3)//天數不等於6,跳過
return (shuliang(3+1)+1)*2;//呼叫自身,天數=3+1,繼續函式 } //天數為4,第二次計算
function shuliang(4)//天數不等於6,跳過
return (shuliang(4+1)+1)*2;//呼叫自身,天數=4+1,繼續函式 } //天數為5,第三次計算
function shuliang(5)//天數不等於6,跳過
return (shuliang(5+1)+1)*2;//呼叫自身,天數=5+1,繼續函式 } //天數為6,第四次計算
function shuliang(3)//天數等於6,返回1 } //第四次計算返回1到第三次計算中
function shuliang(5) //第三次計算返回4到第二次計算中
function shuliang(4) //第二次計算返回10到第一次計算中
function shuliang(3) //最後,返回第三天的數量為22
第一次計算:
ts不等於6,過
呼叫函式自身,ts=4,繼續函式
第二次計算:
ts不等於6,過
呼叫函式自身,ts=5,繼續函式
第三次計算:
ts不等於6,過
呼叫函式自身,ts=6,繼續函式
第四次計算:
ts等於6,返回1
第四次計算返回1到第三次計算中,
第三次計算返回(1+1)*2=4到第二次計算中,
第二次計算返回(4+1)*2=10到第一次計算中
第一次計算返回(10+1)*2=22
得出第三天數量是22
函式功能:給乙個資料夾的路徑,返回給資料夾下檔案的數量
function shuliang(資料夾路徑)else開啟資料夾}
如果遇到的是檔案,數量+1
如果遇到的是資料夾,執行函式,開啟資料夾,如果遇到的是檔案,數量+1,如果遇到的是資料夾,執行函式……
javascript函式式程式設計 遞迴函式
遞迴運算 使用尾遞迴可以避免遞迴的消耗記憶體的問題 遞迴是函式對自身的呼叫 遞迴的組成 遞迴呼叫 遞迴終止條件 if語句來進行控制 呼叫的形式 有直接呼叫 和 間接呼叫兩種方式 直接呼叫 若果在呼叫函式f 的過程中,又要呼叫f 間接呼叫 呼叫f1 的過程中又要呼叫f2 而在呼叫f2 的過程中又要呼叫...
javascript(一)建構函式遞迴
最近專案中有個需求,react專案中做乙個選單配置項的功能,即傳入某個url的引數,匹配出選單資料內該選單內的子選單項及其元件。資料體 選單配置項 export const menus 即進入usermanage元件,傳入 usermanage 匹配出該選單下的子選單項。import from ro...
遞迴之遞迴的函式
遞迴的函式 time limit 1000 ms memory limit 65536 kib submit statistic discuss problem description 給定乙個函式 f a,b,c 如果 a 0 或 b 0 或 c 0 返回值為 1 如果 a 20 或 b 20 或...