遞迴是一種方法內呼叫自身方法的一種程式設計技術,像一些階乘、求和等數學問題可以實現,不過複雜度會提高,最能體現遞迴之美的當屬漢諾塔問題。同樣我們用遞迴實現了斐波那契數列和三角數字。
漢諾塔問題:如下圖所示,要求將乙個座上的盤子全部搬運到最後乙個支柱上,有乙個輔助支柱。
搬運規則:
1.一次只能移動一張盤子
2.不能將較大的盤子放在較小的盤子上面
3.最後盤子只能全部放在某乙個支柱上面
搬運示意圖:下圖是總數為3的搬運過程
顯然,當進行到第三次搬運時,就回到總數為2的搬運題目,而第n個盤子可以在接下來的一步放入目標支柱(如上圖的第四步);因此,我們可以考慮上面n-1塊的盤子搬運問題,而n-1塊的盤子搬運又可以看成是上面為n-2塊加最底層那塊,同樣連續呼叫相同的方法解決,最後歸結為一塊的搬運問題。
下面是實現**:
package recursion;
//遞迴方法的使用,test(),test2();
public
class
recursion1
public
static
void
test()
public
static
void
test2
(int k)
test2
(--k)
;//繼續呼叫該方法
}//三角數字(該數列的第n項是由第n-1項加上n得到)
public
static
intredetangle
(int n)
else
}//斐波那契數列:第一項為0,第二項為1,第n項為第n-1項和第n-2項的和
public
static
intrefeibbo
(int n)
else
if(n==2)
else
}//漢諾塔問題:所有盤子從大到小依次放在a座,需要將a座所有盤子搬到c座,每次只能移動乙個盤子,且任何盤子不能放在比自己小的盤子上面
//引數說明:topn表示盤子個數,start表示開始的座,middle表示中間座,endle表示最後移入的座
public
static
void
hanruota
(int topn,
char start,
char middle,
char endle)
else
}}
JS遞迴的用法JavaScript遞迴)
函式中用呼叫函式自己,此時就是遞迴,遞迴一定要有結束條件 function f1 f1 瀏覽器崩潰,因為沒有結束條件 死迴圈 改進如下 var i 0 function f1 console.log 從前有座山,山里有個廟,廟裡有個老和尚給小和尚講故事 f1 遞迴實現 求n個數字的和 n 5 5 4...
遞迴的幾種用法
以前一直對遞迴發怵,一想到它就 渾身哆嗦 但是遞迴確實是非常精髓和精妙的,有時候處理問題會非常的方便。比如排序,遍歷目錄下的檔案什麼的,但是老這麼怕他也不是個辦法.先看乙個排序的 現有122345六個數,要求用乙個main函式實現所有不同的排序並列印出來,要求 4不能在第三位,3和5不能相連 某公司...
python遞迴函式的用法
def fact n if n 1 return 1 return n fact n 1 遞迴函式的使用能夠簡化程式,但同時面對可能出現棧溢位的問題 解決方案是 解決遞迴呼叫棧溢位的方法是通過尾遞迴優化,事實上尾遞迴和迴圈的效果是一樣的,所以,把迴圈看成是一種特殊的尾遞迴函式也是可以的。尾遞迴是指,...