遞迴演算法筆記

2021-10-20 12:01:46 字數 2101 閱讀 3760

尾遞迴:函式在呼叫自身之後沒有執行其他任何的操作就是尾遞迴。

尾遞迴的原理是將遞迴變成迭代。

例1:列印出從0-9的整數

迴圈:

public

class

main

}}

遞迴:

public

class

main

//列印從begin到end,先列印begin

public

static

voidf2(

int begin,

int end)

public

static

void

main

(string[

] args)

}

如果沒有明顯的相似性,需要主動構造相似性

不能相似的原因很可能是缺少引數

遞迴與數學上的遞推公式很類似

例2:將陣列累加求和

迴圈:

public

class

main2

public

static

void

main

(string[

] args)

;int sum=

addall

(a);

system.out.

println

(sum);}

}

遞迴:

public

class

main2

public

static

void

main

(string[

] args)

; system.out.

println(f

(a,0))

;}}

例3:判斷兩個字串是否相等

用已有函式:

public

class

main1

public

static

void

main

(string[

] args)

}

遞迴實現:

public

class

main1

public

static

void

main

(string[

] args)

}

遞迴呼叫僅僅是被調函式恰為主調函式

注意每次呼叫的層次不同

注意每次分配形參並非同乙個變數

注意返回的次序

例4:在n個球中,任意取出m個(不放回),求有多少種取法

遞迴:

public

class

main3

public

static

void

main

(string[

] args)

}

例5:全排列

遞迴實現:

//全排列 abc acb bac bca cab cba

public

class

main4

//k:當前交換位置,與其後的元素進行交換

for(

int i=k;ipublic

static

void

main

(string[

] args)

}

例6:求兩個字串的最長公共子串行的長度

遞迴實現:

//求兩個字串的公共子串行

//演算法:可解,優化

public

class

main5

public

static

void

main

(string[

] args)

}

《演算法筆記》4 3遞迴

一.分治 分治是一種思想,可以用遞迴的方法實現,也可以用非遞迴的方法實現 二.遞迴 自底向上 三.題目 1.全排列 方法一 include using namespace std int n p 11 void generatep int index else if t 0 int main 方法二...

演算法筆記 4 3 遞迴

三.回溯 2.字母全排列 3.數樓梯 總時間限制 1000ms 記憶體限制 65536kb 描述逆波蘭表示式是一種把運算子前置的算術表示式,例如普通的表示式2 3的逆波蘭表示法為 2 3。逆波蘭表示式的優點是運算子之間不必有優先順序關係,也不必用括號改變運算次序,例如 2 3 4的逆波蘭表示法為 2...

演算法筆記 遞迴 迭代

例題1 階乘函式 int func int n 乙個完整的階乘函式應該像上面一樣寫,一般的書都是預設了輸入的時候不會輸出超過範圍的數字,但是我們自己寫程式的時候,應該要考慮所有的情況。乙個遞迴應該能讓所有輸入的值都有乙個出口。所以一般來說,遞迴應該由三個部分組成 遞迴體 自己呼叫自己 遞迴出口,和容...