遞迴
定義:
乙個函式直接或間接呼叫自己
遞迴滿足的三個條件
1.必須有乙個明確的終止條件
2.該函式所處理的資料規模(值可以增,規模要減)必須遞減
3.程式必須是可解的
4.遞迴是必須有返回值的
迴圈和遞迴
所有的迴圈理論上講都可以轉換為遞迴
沒有明確執行行數的都用遞迴
遞迴:易於理解
速度慢儲存空間大
迴圈:不易理解
速度快儲存空間小
舉例:1.求階乘
2.1+2+3....+100
3.斐波那契數列
4.漢諾塔
5.走迷宮
遞迴的應用:
樹和森林就是以遞迴的方式定義的
樹和圖很多演算法都是通過遞迴來實現的
很多數學公式就是以遞迴的方式定義的
遞迴的基本操作
//1.求階乘
/*************************
遞迴.求階乘
*************************/
# include long f (int n)
}int main ()
printf ("%d的階乘是%ld", n, val);
return
0;}
// 2.1+2+3….+10
/**
****
****
****
****
****
*** 遞迴.1+2+3....+100
****
****
****
****
****
****
*/# include
int f (int n)
}int main ()
for (int i=1;i<=n;i++)
val=val+i;
printf ("從0加到%d是%ld\n", n, val);
printf ("從0加到%d是%ld", n, f (n));
return
0;}
// 3.斐波那契數列
/**
****
****
****
****
****
*** 遞迴.斐波那契數列
****
****
****
****
****
****
*///前面兩項之和構成了後一項的數列被稱為斐波那契數列
//遞迴是一定有返回值的//遞迴是不一定有返回值的。。。比如說那個漢諾塔。。。真的不知道返回個什麼值
//當數比較大的時候,可以很明顯的看出來,迴圈是真的比遞迴快,特別是我用的這台近10年前買的機子,我把這句段話打完了它才從40跑到42.。。。唉
# include
# include
int f (int n)
int main ()
for (i=0;iprintf ("第%d個數是%d\n", i+1, a[i]);
}printf ("\n");
//遞迴實現 //這裡應該是i=1開始的,i=0傳過去判斷,返回0那個數列是從1開始的。。但是原理上011358也符合定義
for (i=1;i<=n;i++)
/*斐波那契數列的數學小魔術
int k;
for (i=1;i<=n;i++)
printf ("第%d個數是%d\n", i, f (i));
*/return
0;}
從小白開始
記錄學習的時光,讓文章成為回憶。quit 退出伺服器的連線 show databases 顯示當前資料庫伺服器下所有的資料庫 use 資料庫名 進入指定的資料庫 show tables 顯示當前資料庫的表 desc 表名 describe 描述表中有哪些列 show create table 表名 ...
從零開始自學Swift 二
swift是一種型別安全的語言 int型變數 var num 12 double型常量 let price 3.12 int8型整數 var ten int8 10 int32型整數 var onethousand int32 1000 整數型別轉換 var onethousandten int32...
從c小白開始自學資料結構 第二天 鍊錶開始
今天因為去了醫院照顧奶奶,所以只學了一上午,不過在醫院做了一道題叫列印沙漏還挺好耍的。鍊錶簡單的需要記憶的知識點 定義 n個結點離散分配 彼此通過指標相連 每個結點只有乙個前驅結點,只有乙個後續結點 首節點沒有前驅,尾結點沒有後續 專業術語 首結點第乙個有效結點 尾結點最後乙個有效結點 頭結點 頭結...