C#資料結構與算法系列(十二):遞迴(Recursion)
阿新 • • 發佈:2020-06-23
1.介紹
簡單的說:遞迴就是方法自己呼叫自己,每次呼叫時傳入不同的變數,遞迴有助於程式設計者解決複雜的問題,同時也讓程式碼變得整潔
2.規則
執行一個方法時,就建立一個新的受保護的獨立空間(棧空間)
方法的區域性變數是獨立的,不會相互影響,比如n變數
如果方法中使用的是引用型別變數(比如陣列),就會共享該引用型別的資料
遞迴必須向退出遞迴條件逼近,否則就是無限遞迴了,出現StackOverflowError,死龜
當一個方法執行完畢,或者遇到return,就會返回,遵守誰呼叫,就將結果返回給誰,同時當方法執行完畢或者返回時,該方法也就執行完畢
3.遞迴能解決什麼問題
1.各種數學問題如:八皇后問題,漢諾塔,階乘問題,迷宮問題等
2.各種演演算法也會使用到遞迴,比如快排、歸併排序,二分查詢,分治演演算法
4.示例:列印問題、階乘問題
1.圖解:
2.程式碼示例
public class RecursionTest
{
public static void Test(int num)
{
if (num > )
{
Test(num - );
} System.Console.WriteLine("num=" + num);
} public static int Factorial(int num){
if (num == )
{
return ;
} return Factorial(num - ) * num;
} public static void RecursionDemo()
{
Test(); System.Console.WriteLine("\n5的階乘是:"+Factorial());
}
}