從小白開始自學資料機構第七天 遞迴

2021-08-15 00:06:56 字數 1894 閱讀 7852

遞迴

定義:

乙個函式直接或間接呼叫自己

遞迴滿足的三個條件

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個結點離散分配 彼此通過指標相連 每個結點只有乙個前驅結點,只有乙個後續結點 首節點沒有前驅,尾結點沒有後續 專業術語 首結點第乙個有效結點 尾結點最後乙個有效結點 頭結點 頭結...