常見基礎演算法

2021-10-19 10:54:24 字數 1867 閱讀 9772

遞迴

遞迴這種演算法一般應用於二叉樹遍歷,深度優先搜尋等這些方面

什麼是遞迴?

常規的定義:在程式語言中,函式func直接或者間接呼叫函式本身,則該函式稱之為遞迴函式。

假設這樣的乙個場景,我們在電影院中看電影,但是這時候你不知道自己在第幾排,於是可以問前面的人他在第幾排,前面的人也不知道自己在第幾排,於是又問他前面的人,以此類推,直到第一排的人告訴第二排的人,第二排的人告訴第三排的人,於是最終傳到自己這一排,通過得知自己前一排是第幾排,就可以知道自己在第幾排,這就可以看做是一種遞迴的·思想

問前排人是第幾排?–》函式

所有的遞迴問題都可以用遞迴公式來表示,所以要用遞迴來解決問題,關鍵就是先找到遞迴公式

f(n) = f(n-1)+1

f(1) = 1

f(n) 表示你當前是第幾排,f(n-1)前面一排所在的排數,f(1)=1表示第一排的人知道自己是第幾排

int f(int n)

遞迴需要滿足3要素:

1.乙個父問題可以拆分成為若干個子問題,並且若干個子問題的結果彙總起來就是父問題的答案

2.父問題和子問題,解題思路必須完全一致,只是資料規模不同

3.存在終止條件

問題在不斷拆分的同時,一定要在某個節點終止拆分,得到乙個明確的答案

問題:假設有n個台階,每次可以跨1個台階或者2個台階,請問走完這n個台階一共有多少種走法?

1.假設有乙個台階,一共有(1)種走法

2.假設有2個台階,一共有2種走法(1,1),(2)

3.假設有3個台階,一共有()種走法?(1,1,1),(1,2),(2,1)

…可以根據第一步的走法進行分類

第一類是第一步走了1個台階

第二類是第一步走了2個台階

所以n個台階的走法就等於先走1個台階後,n-1個台階的走法+先走2個台階後,n-2個台階的走法

f(n)=f(n-1)+f(n-2)

f(1) = 1能否作為終止條件?

n=2,f(2) = f(1)+f(0),如果終止條件只有f(1)=1,f(2)就無解,因為f(0)的值無法確定,把f(2)=2作為乙個終止條件

終止條件有兩個:

f(1)=1;

f(2)=2;

n=3,f(3)=f(2)+f(1)=3

n=e,f(4)=f(3)+f(2)=5

因此,地推公式:

f(1)=1

f(2)=2

f(n)=f(n-1)+f(n-2)

推導出遞迴**如下

intf(

int n)

測試**

public

class

test

}public

static

intf

(int n)

}

氣泡排序

/**

* 陣列氣泡排序

*/public

class

array04maopao

;// 外層控制迴圈次數

for(

int j =

0; j

1; j++)}

} system.out.

println

(arrays.

tostring

(array));

}}

演算法 基礎 常見排序演算法

如果h位比flag小,則需要交換,在此處進行。if l 從l位開始,如果比flag小就將l向右移動,即l while l flag 如果l位比flag大,則需要交換,在此處進行 if l flag 一趟結束,判斷flag兩端的子陣列是否需要排序 if l low if h public static...

C 常見基礎演算法

namespace 面試常見演算法 region 1 2 3 4 m static int test1 int m else return sum endregion region 1,2,3,4四個數字,能夠組成多少互不相同無重複數字的三位數 static void test2 bw,sw,gw ...

單鏈表的常見基礎演算法(二)

1 求單鏈表中的乙個最小值 2 單鏈表逆置 3 l為帶頭結點的單鏈表,實現從尾到頭反向輸出每個結點值 4 遞迴刪去不帶頭結點的單鏈表中所有值為x的結點 5 無序鍊錶中刪除所有值為x的結點並釋放其空間 6 帶頭結點的單鏈表中刪除所有介於給定的兩個值之間的元素 7 帶頭結點的單鏈表中刪除乙個最小值結點 ...