青蛙跳台(含變種)及漢諾塔遞迴,母牛生小牛

2021-09-28 14:47:55 字數 1434 閱讀 9900

#define _crt_secure_no_warnings

#include

#include

//青蛙跳台問題:青蛙只能跳1個或2個台階

intqinwa

(int n)

return

(qinwa

(n -1)

+qinwa

(n -2)

);//倒著想這個問題,如果青蛙向上第n階台階,有從n-1跳乙個台階和從n-2跳兩個

//台階到達,所以跳n個台階共有qinwa(n-1)+qinwa(n-2)種方法;

}//**青蛙跳台問題:假設有n個台階,青蛙可以跳1、2、3....n個台階

intbtqinwa

(int n)

if(n ==

1|| n ==2)

/*f(0)=1表示一次跳完n個台階

f(1) = 1

f(2) = 2

f(3) = f(3 - 1) + f(3 - 2) + f(3 - 3);跳3個台階,第一次跳1個台階,剩下2個台階有f(2)種方法;第二次跳2個台階,

剩下1個台階有f(1),種方法;第三次,跳3個台階;所以共有f(2)+f(1)+f(0)=2+1+1=4

...以此類推

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

f(n) = f(n - 1) + f(n - 2) + f(n - 3)... + f(0) = f(n - 1) + f(n - 1) = 2 * f(n - 1)

*/return2*

btqinwa

(n -1)

;}//漢諾塔問題

int tag =0;

//記錄移動次數

void

move

(int n,

char a,

char c)

//n記錄移動的是幾號圓盤

void

hanoi

(int n,

char a,

char b,

char c)

else

}//母牛生小牛問題

intmniu

(int year)

if(year ==

1||year==

2||year==3)

return

mniu

(year -3)

+mniu

(year -1)

;//mniu(year - 3)代表year的3年前成熟的母牛數量,mniu(year - 1)代表year的前1年牛的數量

}int

main()

斐波拉契數列 漢諾塔,青蛙跳台階

斐波拉契數列 漢諾塔,青蛙跳台階 的演算法實現 一.斐波那契數列 1,1,2,3,5,8,13,21,34 f n 0,1,f n 1 f n 2 n 0n 1 n 2遞迴解法 效率很低 public function fibonacci1 n if n 1 return fibonacci1 n ...

C 語言基礎實現青蛙跳台階和漢諾塔問題

目錄 乙隻青蛙一次可以跳上1級台階,也可以跳上2級台階。求該青蛙跳上乙個 n 級的台階總共有多少種跳法 遇見題目我們可以在紙上先動手畫畫,把最簡單的幾種方式列出來,作比較,找規律。按照上面 可以從跳法次數,過程,或者兩者結合找規律 1.從跳法次數分析 1 遞迴 include www.cppcns....

青蛙跳台階及其變種型別(遞迴思想)

題目 青蛙的最後一跳可以分為兩種情況 第一種是最後一跳只跳了乙個台階 第二種是最後一跳只跳了兩個台階。最後一跳,不會影響前面的跳法總數 這句話的意思是 假如有n個台階,跳法總數為f n 通過上面分析可知,f n 由兩部分跳法組成 第一種是最後只能跳乙個台階,也就是前面跳了n 1個台階。那麼對於這種情...