關於遞迴的幾道題目

2022-08-15 22:18:10 字數 2387 閱讀 3192

其實遞迴我一直不太會用,正好這次的題目講了再加上自己網上搜的**把這次的兩道遞迴題總結了一下。

小明剛剛看完電影《第39級台階》,離開電影院的時候,他數了數禮堂前的台階數,恰好是39級!

站在台階前,他突然又想著乙個問題:

如果我每一步只能邁上1個或2個台階。先邁左腳,然後左右交替,最後一步是邁右腳,也就是說一共要走偶數步。那麼,上完39級台階,有多少種不同的上法呢?

請你利用計算機的優勢,幫助小明尋找答案。

//答案:51167078

這是第一次自己做不會做的時候,在網上搜的**,然後自己做的註解。

主要的思想就是,現在一共有39級台階,建立乙個函式f(n,s)。n表示台階的階數,s表示上台階的方案(一步走1||2)。然後39級台階,遞迴,一次走1||2,知道n==0,並且步數要為偶數即s.length()%2==0

1

public

class

main

7/**

8* 遞迴求解其中 9*

@param

n 台階的級數

10*

@param

s 上台階的方案

11*/

12static

void f(int

n,string s)

1819

if(n==0)

26/**

27* 當台階還沒有走完時,繼續走下去

28* 每一步可以走乙個台階或者是兩個台階

29*/

30for(int i=1;i<3;i++) 33}

34 }

在講這道題的時候和這個方法差不多,就是39->0 和 0->39的區別。我自己覺得第二種更好理解一些。然後根據自己的記憶和理解寫了下面這種方法:

step->現在已經走了的台階數,從0開始一次+1||+2

s->現在已經走了幾步,1 2 3 4.。。。用於最後step==39時判斷是否走了偶數步

1

public

class

main 11}

12 s++;

13 do(step+1,s);

14 do(step+2,s);15}

16public

static

void

main(string args)

2122 }

小明參加了學校的趣味運動會,其中的乙個專案是:跳格仔。

地上畫著一些格仔,每個格仔裡寫乙個字,如下所示:(也可參見p1.jpg)

從我做起振

我做起振興

做起振興中

起振興中華

比賽時,先站在左上角的寫著「從」字的格仔裡,可以橫向或縱向跳到相鄰的格仔裡,但不能跳到對角的格仔或其它位置。一直要跳到「華」字結束。

要求跳過的路線剛好構成「從我做起振興中華」這句話。

請你幫助小明算一算他一共有多少種可能的跳躍路線呢?

**:不多說了,註解也很清楚了

1

public

class

main ,

4 ,

5 ,

6 7};

8public

static

int res=0;9//

t,top指高度 l,left指寬度

10public

static

void dfs(int deep,int t,int

l)17 deep++;

18 dfs(deep,t+1,l);//

向下走19 dfs(deep,t,l+1);//

向右走2021}

22public

static

void

main(string args)

2627 }

另一種方法就是我一開始做題的時候用的,數數法。也能數出來。但是我沒注意到這個找規律是楊輝三角,我直接截圖了講題的圖應該都能看出來的。

幾道關於面試的題目

實現乙個演算法,確定乙個字串的所有字元是否全部相同?最想想到的方法是通過比較該字串的每乙個字元,演算法的時間複雜度為0 n2 次。另一種辦法是可以利用set資料結構來實現,因為在set中不允許存在重複的字元。有乙個有意思的地方是在進行判斷前可以先判斷字串的長度,如果字串的長度大於256,那麼我們可以...

幾道C語言題目

下面 的輸出結果是?int main int ptr 3 a printf d,d n ptr 1 ptr 2 ptr printf d,d n ptr 1 ptr 2 system pause return 0 2,3 5,6 ptr的型別是int 3 那麼 ptr的型別便是int 3 也就是in...

關於遞迴題目的解法

作 由於自己遇到好多次遞迴的問題,一開始也不是很理解,看到大佬們的題解都是膜拜ing 打算自己總結一下 一般來說,遞迴的問題 都非常的簡潔 但簡潔所帶來的問題就是不容易理解,而且對於初學者來說,還會很容易轉牛角尖 往往遞迴的問題都有章可循,在a了幾道題並觀賞了大佬們寫的 後,總結出了遞迴問題的規律 ...