oj遞迴 回顧

2021-10-03 16:38:36 字數 2981 閱讀 6531

1.逆波蘭表示式

一種把運算子前置的算數表示式(特點運算子之間不必有優先順序關係)

#include

#include

using

namespace std;

float

atof

(char

*c)doubleys(

)}intmain()

小結:首先遞迴的終止是讀取終止符,其次是遞迴的方式是遇到運算子返回後兩位進行運算,最後中的sscanf函式:從字串中讀進與指定格式相符的資料。

2.全排序:輸出給定字串的所有全排序,並已知給定的是從小到大排序的。

#include

#include

#include

#include

using

namespace std;

string str[

722]

;//全域性變數;

int a=0;

voidpe(

char

*l,int k,

int m)

else

for(

int j=k;j<=m;j++)}

intmain()

總結:首先遞迴思想一串字串進行排序,首先定乙個在頭部然後後面在進行排序,遞迴每定乙個排的方式減少,但只剩最後乙個字元就只有一種排法,為遞迴的終止條件。運用swap函式,中的strlen函式:計算給定字串的(unsigned int)長度,sort函式:排序函式,預設從小到大。

3.pell數列:a1=1,a2=2,…an=2*a(n-1)+a(n-2).求pell數列的第k項模上32767是多少。

#include

#define m 1000005

//巨集定義命令;

using

namespace std;

long

long a[m]=;

long

long

fbnq

(int n)

intmain()

for(i=

0;i)return0;

}

總結:首先題目給出咯遞迴規則(an=z*a(n-1)+a(n-2)),但直接用遞迴會超時,所以得將遞迴記憶化

4.爬樓梯:每次可以走1級或者2級,輸入樓梯的級數,求不同的走法數。

#include

#include

using

namespace std;

intzf

(int n)

intmain()

總結:遞迴的規則遞迴的規則,總共的方法等於每次走一梯,加上每次走兩梯的方法,即f(n)=f(n-1)+f(n-2).此題的關鍵就在於找這遞迴規則。

5.放蘋果:把m個同樣的蘋果放在n個同樣的盤子裡,允許有的盤子空著不放,問共有多少種不同的分法?

#include

using

namespace std;

intf

(int m,

int n)

intmain()

for(i=

0;i) cout<

}

總結:遞迴的終止條件為蘋果為零時或盤子數為1時,遞迴終止;遞迴規則,總數為每個盤子都放有蘋果的總數(f(m-n,n))加上有空盤子的情況下的總數(f(m,n-1))。

6.分解因數:給出乙個正整數a,要求分解成若干個正整數的乘積,即a = a1 * a2 * a3 * … * an,並且1 < a1 <= a2 <= a3 <= … <= an,問這樣的分解的種數有多少。注意到a = a也是一種分解。

#include

using

namespace std;

intfy

(int m,

int n)

return a;

}int

main()

for(

int j=

0;j) cout<<}

總結:主要是遞迴規則的尋找,從最小的2開始,一一找出所有的因數。較大的因數還可分解為更小的因數的存在,當為全為最小的因陣列時為最後一種情況。

7.2的冪次方表示:任何乙個正整數都可以用2的冪次方表示。

#include

#include

using

namespace std;

voidf(

int n)

if(n==2)

while

(pow(2

,i)<=n)

//從能找出2的最大的冪次方表示;

i++; cout<<

"2";

if(i>2)

//將較大的冪在進行進一步的分解為2的冪次方表示;

if(n-

pow(

2,i-1)

!=0)}

intmain()

總結:此題是開始找出最接近或是等於n的2的冪次方,然後剩下的數在尋找小一點的2的冪次方,以此遞迴下去。

總的的來說就是難以形成 遞迴的思想,和尋找遞迴的規則。期待之後能將遞迴思想貫穿於腦海。

遞迴回顧(迷宮問題,八皇后問題)

簡單的說 遞迴就是方法自己呼叫自己,每次呼叫時傳入不同的變數,遞迴有助於程式設計者解決複雜的問題,同時讓 變得簡潔。遞迴呼叫規則 1.當程式執行到乙個方法的時候,就會開闢乙個獨立的空間棧 2.每個空間的資料 區域性變數 是獨立的 列印問題 8public static void test int n...

使用with遞迴回溯

向上回溯,查詢頂級部門 declare pdeptid uniqueidentifier with dept deptid,pdeptid as select udepid,uparentid from oa.dbo.depinfo where udepid in select p.udepid f...

遞迴回溯總結

遞迴回溯法對解空間樹作深度優先搜尋,一般情況可表示為 void backtrack int n else 引數n表示遞迴的深度 is ok 表示已經求得問題解 print reult 表示列印結果 如果只求出乙個可行解,那麼求得第乙個問題解後便可exit 如果要求出所有可行解則不需exit base...