其實遞迴我一直不太會用,正好這次的題目講了再加上自己網上搜的**把這次的兩道遞迴題總結了一下。
小明剛剛看完電影《第39級台階》,離開電影院的時候,他數了數禮堂前的台階數,恰好是39級!
站在台階前,他突然又想著乙個問題:
如果我每一步只能邁上1個或2個台階。先邁左腳,然後左右交替,最後一步是邁右腳,也就是說一共要走偶數步。那麼,上完39級台階,有多少種不同的上法呢?
請你利用計算機的優勢,幫助小明尋找答案。
//答案:51167078
這是第一次自己做不會做的時候,在網上搜的**,然後自己做的註解。
主要的思想就是,現在一共有39級台階,建立乙個函式f(n,s)。n表示台階的階數,s表示上台階的方案(一步走1||2)。然後39級台階,遞迴,一次走1||2,知道n==0,並且步數要為偶數即s.length()%2==0
1在講這道題的時候和這個方法差不多,就是39->0 和 0->39的區別。我自己覺得第二種更好理解一些。然後根據自己的記憶和理解寫了下面這種方法: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 }
step->現在已經走了的台階數,從0開始一次+1||+2
s->現在已經走了幾步,1 2 3 4.。。。用於最後step==39時判斷是否走了偶數步
1public
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了幾道題並觀賞了大佬們寫的 後,總結出了遞迴問題的規律 ...