遞歸案例分享
一般定義
程序調(diào)用自身的編程技巧稱為遞歸( recursion)。
一個(gè)過程或函數(shù)在其定義或說明中有直接或間接調(diào)用自身的一種方法,它通常把一個(gè)大型復(fù)雜的問題層層轉(zhuǎn)化為一個(gè)與原問題相似的規(guī)模較小的問題來求解,遞歸策略只需少量的程序就可描述出解題過程所需要的多次重復(fù)計(jì)算,大大地減少了程序的代碼量。遞歸的能力在于用有限的語句來定義對(duì)象的無限集合。一般來說,遞歸需要有邊界條件、遞歸前進(jìn)段和遞歸返回段。當(dāng)邊界條件不滿足時(shí),遞歸前進(jìn);當(dāng)邊界條件滿足時(shí),遞歸返回。
注意:
(1) 遞歸就是在過程或函數(shù)里調(diào)用自身;
(2) 在使用遞歸策略時(shí),必須有一個(gè)明確的遞歸結(jié)束條件,稱為遞歸出口。
C#遞歸算法實(shí)例:
計(jì)算數(shù)組{1,1,2,3,5,8.......} 第30位值,不用遞歸,我寫出了以下這樣的代碼:
static void Main(string[] args)
...{
int[] num=new int[30];
num[0]=1;
num[1]=1;
int first=num[0];
int second=num[1];
for (int i = 2; i < num.Length; i++)
...{
num[i] = first + second;
first = second;
second = num[i];
}
Console.WriteLine(num[29]);
Console.ReadLine();
}
C#遞歸算法的使用,以下是代碼:
static void Main(string[] args)
...{
Console.WriteLine(Process1(30));
Console.ReadLine();
}
public static int Process1(int i)
...{
//計(jì)算數(shù)組{1,1,2,3,5,8.......} 第30位值
if (i == 0) return 0;
if (i == 1) return 1;
else
return Process1(i - 1) + Process1(i - 2);
}
// 階乘
public class Factorial {
public static void main(String[] args) {
System.out.println(factorial(6));
}
public static int factorial(int n) {
// 出口點(diǎn)
if (1==n) {
return 1;
} else {
return n * factorial(n - 1);
}
}
}
// 斐波那契數(shù)列
public class Fibonacci {
public static void main(String[] args) {
System.out.println(fibonacci(6));
}
// 斐波那契數(shù)列:(從第三項(xiàng)開始,后一項(xiàng)都是前兩項(xiàng)的和)
// 1 1 2 3 5 8 13 ......
public static int fibonacci(int n) {
// 出口點(diǎn)
if (1==n || 2==n) {
return 1;
} else {
return fibonacci(n-1) + fibonacci(n-2);
}
}
}
// 遍歷一個(gè)目錄下的所有文件
public class FileList {
private static List<String> fileNameList = new ArrayList<String>();
public static void main(String[] args) {
String dir = "D://360Rec";
File file = new File(dir);
addAll(file);
for (String name : fileNameList) {
System.out.println(name);
}
}
public static void addAll(File file) {
// 出口點(diǎn): 是文件或者是空目錄
if (file.isFile() || file.list().length==0) {
fileNameList.add(file.getName());
} else {
File [] files = file.listFiles();
for (File f : files) {
addAll(f);
if (f.isDirectory() && f.list().length!=0) {
fileNameList.add(f.getName());
}
}
}
}
}
- php實(shí)例分享之通過遞歸實(shí)現(xiàn)刪除目錄下的所有文件詳解
- php遞歸刪除目錄下的文件但保留的實(shí)例分享
- PHP遞歸刪除目錄幾個(gè)代碼實(shí)例
- c#遞歸遍歷文件夾示例
- C# 遞歸查找樹狀目錄實(shí)現(xiàn)方法
- C#遞歸題目實(shí)例代碼
- 尾遞歸詳細(xì)總結(jié)分析
- c#斐波那契數(shù)列(Fibonacci)(遞歸,非遞歸)實(shí)現(xiàn)代碼
- C# 實(shí)現(xiàn)階乘 (遞歸,非遞歸) 實(shí)現(xiàn)代碼
- C#歸并排序的實(shí)現(xiàn)方法(遞歸,非遞歸,自然歸并)
- c#漢諾塔的遞歸算法與解析
- C# 遞歸函數(shù)詳細(xì)介紹及使用方法
相關(guān)文章
WinForm下 TextBox只允許輸入數(shù)字的小例子
WinForm下 TextBox只允許輸入數(shù)字的小例子,需要的朋友可以參考一下2013-04-04C#實(shí)現(xiàn)數(shù)字轉(zhuǎn)換漢字的示例詳解
這篇文章主要為大家詳細(xì)介紹了如何利用C#實(shí)現(xiàn)數(shù)字轉(zhuǎn)換漢字功能,文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)C#有一定的幫助,感興趣的小伙伴可以跟隨小編一起了解一下2022-12-12C#?使用PrintDocument類打印標(biāo)簽的方法
本文介紹打印機(jī)初步配置,以及實(shí)現(xiàn)方法,標(biāo)簽主要展示資產(chǎn)基本信息以及二維碼,對(duì)C#?使用PrintDocument類打印標(biāo)簽的詳細(xì)過程感興趣的朋友一起看看吧2022-04-04WinForm IP地址輸入框控件實(shí)現(xiàn)
這篇文章主要為大家詳細(xì)介紹了WinForm IP地址輸入框控件的實(shí)現(xiàn)代碼,基于VS2010模擬windows系統(tǒng)自帶IP輸入框,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-05-05C#中Invoke和BeginInvoke實(shí)際應(yīng)用詳解
這篇文章主要給大家介紹了關(guān)于C#中Invoke和BeginInvoke實(shí)際應(yīng)用的相關(guān)資料,Invoke是對(duì)象方法,BeginInvoke是靜態(tài)方法,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下2023-12-12在Winform框架界面中改變并存儲(chǔ)界面皮膚樣式的方法
下面小編就為大家分享一篇在Winform框架界面中改變并存儲(chǔ)界面皮膚樣式的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助2017-11-11Jquery+Ajax+Json+存儲(chǔ)過程實(shí)現(xiàn)高效分頁
這篇文章主要介紹Jquery+Ajax+Json+存儲(chǔ)過程實(shí)現(xiàn)分頁,需要的朋友可以參考下2015-08-08C#中ExecuteNonQuery()返回值注意點(diǎn)分析
這篇文章主要介紹了C#中ExecuteNonQuery()返回值注意點(diǎn)分析,對(duì)于C#數(shù)據(jù)庫程序設(shè)計(jì)有很大的借鑒價(jià)值,需要的朋友可以參考下2014-08-08