C#遞迴
轉自:https://www.cnblogs.com/fengjiulin110120/p/6681060.html
什麼是遞迴函式/方法?
任何一個方法既可以呼叫其他方法又可以呼叫自己,而當這個方法呼叫自己時,我們就叫它遞迴函式或者遞迴方法!
通常遞迴有兩個特點:
1.遞迴方法一直會呼叫自己直到某些條件滿足,也就是說一定要有出口;
2.遞迴方法會有一些引數,而它會把這些新的引數值傳遞給自己;(自己調自己);
遞迴通常用於: ①.階乘 ②.斐波拉切數列;
1.階乘
階乘(!)是小於某個數的所有正整數的乘積;
注意:0既不是正整數,又不是負整數;0是整數;
0!=1
1!=1
2!=2*1!=2
3!=3*2!=6
4!=4*3!=24
5!=5*4!=120
...
n!=n*(n-1)!
下面是計算階乘的一種實現方法(沒有使用遞迴):
public long Factorial(int n){
if(n==0)
return 1;
long value=1;
for(int i=n;i>0;i--){
value*=i;
}
return value;
}
// 遞迴方法:
pubic long Factorial(int n){
if(n==0){
return 1;
return n*Factorial(n-1);
}
}
你知道的,n的階乘實際上就是n-1的階乘乘以n,且n>0;
它可以表示成Factorial(n)=Factorial(n-1)*n;
這是方法的返回值,但我們需要一個條件,也就是出口(注意:遞迴一定要有出口)
如果n=0則返回1;
現在這個程式的邏輯應該很清楚了,這樣我們就能夠輕易的理解了.
2.(Fibonacci)斐波拉切數列:
Fibonacci數列是按以下順序排列的數字:
1,1,2,3,5,8,13,21,34,55....
我們不難發現數列的排列規律是:後一個數加上前一個數,以此類推;
如果F0=0並且F1=1那麼Fn=F(n-1)+F(n-2);
下面是計算Fabonacci數列的一種實現方法(沒有使用遞迴):
public long Fibonacci(int n){
int a=1;
int b=1;
int n; // 宣告一個變數用來定義數列的長度;
for(int i=2;i<n;i++){
b=a+b; // 得到b的值;
a=b-a; // 得到上一次a的值;
}
}
// 遞迴方法:
public long Fabinacci(int n){
if(n==0||n==1){ // 滿足條件
return n;
}
return Fabinacci(i-2)+Fabinacci(i-2); // 返回值
}
我們通過排列發現,Fabonacci數列實際上就是後一個數加上前一個數的和
Fabonacci(n)=Fabonacci(n-2)+Fabonacci(n-1);
當數列元素從0開始排列時,滿足判斷條件得到返回值 n;
然後跳出進行下面語句,一直迴圈到滿足n的條件,跳出出口得到返回值Fabonacci(n);
總結:方法實現體內再次呼叫方法本身的本質是多個方法的簡寫;
它既可以呼叫其他方法,又可以呼叫自身.
遞迴一定要有出口;
例:
public void Func1(ref int num){
if(num<3){
num++;
Func2(ref num);
}
}
public void Func2(ref int num){
if(num<3){
num++;
Func3(ref num);
}
}
public void Func3(ref int num){
if(num<3){
num++;
Func4(ref num);
}
}
那麼我們可以將上述方法直接簡寫:
public void Func(ref int num){
if(num<3){
num++;
Func(ref num);
}
}
原文請見:https://www.cnblogs.com/fengjiulin110120/p/6681060.html
相關文章
- C#遞迴例程C#遞迴
- C#實現FFT(遞迴法)C#FFT遞迴
- C#語言函式遞迴C#函式遞迴
- c#遞迴實現 階乘C#遞迴
- 用c#進行遞迴組合C#遞迴
- 遞迴和尾遞迴遞迴
- C# 面試常見遞迴演算法C#面試遞迴演算法
- 快速排序【遞迴】【非遞迴】排序遞迴
- 探索c#之遞迴APS和CPSC#遞迴
- C#中漢諾塔問題的遞迴解法C#遞迴
- 簡單C#遞迴(向前查詢上工序)C#遞迴
- 遞迴遞迴
- 探索c#之尾遞迴編譯器優化C#遞迴編譯優化
- ACM(遞迴遞推—A)ACM遞迴
- ACM(遞迴遞推—I)ACM遞迴
- JavaScript遞迴JavaScript遞迴
- go 遞迴Go遞迴
- 理解遞迴遞迴
- 遞迴 Java遞迴Java
- 遍歷二叉樹-------遞迴&非遞迴二叉樹遞迴
- Hellow C# unity學習記錄(8)函式的遞迴C#Unity函式遞迴
- 遞迴和遞推總結遞迴
- 演算法小專欄:遞迴與尾遞迴演算法遞迴
- 迭代與遞迴--你被遞迴搞暈過嗎?遞迴
- 遞迴函式遞迴函式
- 理解遞迴 Recurtion遞迴
- 遞迴-*快速排序遞迴排序
- sql server遞迴SQLServer遞迴
- Vue元件遞迴Vue元件遞迴
- javascript遞迴整理JavaScript遞迴
- oracle遞迴(二)Oracle遞迴
- oracle遞迴(一)Oracle遞迴
- SQL 遞迴思想SQL遞迴
- 遞迴演算法經典例項小結(C#實現)遞迴演算法C#
- C# TreeView選單,MenuStrip選單遞迴動態生成例子C#View遞迴
- 快速排序(遞迴及非遞迴演算法原始碼)排序遞迴演算法原始碼
- ?30 秒瞭解尾遞迴和尾遞迴優化遞迴優化
- 徹底理解遞迴,從遞迴的本質說起!遞迴