斐波那契數列(跳台階)

2021-09-17 21:03:34 字數 2123 閱讀 3361

題目1:斐波那契數列

大家都知道斐波那契數列,現在要求輸入乙個整數n,請你輸出斐波那契數列的第n項(從0開始,第0項為0)。 n<=39

斐波那契數列定義:

1、1、2、3、5、8、13、21、34、……

我們最容易想到的是遞迴的方式,**如下:

public int fibonacci(int n) 

if(n==1)

return fibonacci(n-1)+fibonacci(n-2);

}

但這並不是最優解,有很嚴重的效率問題。

改進

從下往上計算,首先根據f(0),f(1)算出f(2),再根據f(1)f(2)算出f(3)…以此類推算出第n項。實現**如下:

public int fibonacci(int n) else if(n==1||n==2)else

return fibn;

}

}

題目2:跳台階

乙隻青蛙一次可以跳上1級台階,也可以跳上2級。求該青蛙跳上乙個n級的台階總共有多少種跳法(先後次序不同算不同的結果)。

a.如果兩種跳法,1階或者2階,那麼假定第一次跳的是一階,那麼剩下的是n-1個台階,跳法是f(n-1);

b.假定第一次跳的是2階,那麼剩下的是n-2個台階,跳法是f(n-2)

c.由a\b假設可以得出總跳法為: f(n) = f(n-1) + f(n-2)

d.然後通過實際的情況可以得出:只有一階的時候 f(1) = 1 ,只有兩階的時候可以有 f(2) = 2

e.可以發現最終得出的是乙個斐波那契數列

**同上。

題目3:**跳台階

乙隻青蛙一次可以跳上1級台階,也可以跳上2級……它也可以跳上n級。求該青蛙跳上乙個n級的台階總共有多少種跳法。

f(1) = 1

f(2) = f(2-1) + f(2-2) //f(2-2) 表示2階一次跳2階的次數。

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

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

進行簡化:

f(n-1) = f(0) + f(1)+f(2)+f(3) + … + f((n-1)-1) = f(0) + f(1) + f(2) + f(3) + … + f(n-2)

f(n) = f(0) + f(1) + f(2) + f(3) + … + f(n-2) + f(n-1) = f(n-1) + f(n-1)

可以得出:

f(n) = 2*f(n-1)

總的跳法為:

1 ,                  (n=0 )

f(n) = 1 ,                 (n=1 )

2*f(n-1),        (n>=2)

**如下:

public int jumpfloorii(int target) else

}

題目4:矩形覆蓋

我們可以用21的小矩形橫著或者豎著去覆蓋更大的矩形。請問用n個21的小矩形無重疊地覆蓋乙個2*n的大矩形,總共有多少種方法?

先把28的覆蓋方法記為f(8).

用第乙個小矩形去覆蓋最左邊時有兩種選擇:

豎著放:右邊還剩27區域,覆蓋方法記為f(7)。

橫著放:右邊還剩2*6區域,覆蓋方法記為f(6)。

因此f(8)=f(7)+f(6) 仍是斐波那契數列。

**如下:

public int rectcover(int target) else

}

跳台階問題 斐波那契數列

本篇文章有兩道題。對於本題,前提只有 一次 1階或者2階的跳法。a.如果兩種跳法,1階或者2階,那麼假定第一次跳的是一階,那麼剩下的是n 1個台階,跳法是f n 1 b.假定第一次跳的是2階,那麼剩下的是n 2個台階,跳法是f n 2 c.由a b假設可以得出總跳法為 f n f n 1 f n 2...

青蛙跳台階(斐波那契數列應用)

1 乙隻青蛙一次可以跳上 1 級台階,也可以跳上2 級。求該青蛙跳上乙個n 級的台階總共有多少種跳法。2 乙隻青蛙一次可以跳上1級台階,也可以跳上2 級 它也可以跳上n 級,此時該青蛙跳上乙個n級的台階總共有多少種跳法?問題1 題目描述 乙隻青蛙一次可以跳上1級台階,也可以跳上2級。求該青蛙跳上乙個...

C 實現斐波那契數列 青蛙跳台階

題目 寫乙個函式,輸入n,求斐波那契 fibonacci 數列的前n項。斐波那契數列的定義如下 1 方法1 迴圈的實現方法 include using namespace std int main int main int num 50 int data new int num memset dat...