劍指offer(Python版本) 遞迴和迴圈

2021-10-06 01:37:02 字數 3714 閱讀 5385

f(1)=1,f(2)=1, f(n)=f(n - 1)+f(n - 2)(n ≥ 3,n ∈ n*)

題目描述:

現在要求輸入乙個整數n,請你輸出斐波那契數列的第n項(從0開始,第0項為0,第1項是1)。

解題思路:

1)第一種解法:遞迴

2)第二種解法:迴圈

實現**如下:

class

solution

:def

fibonacci

(self, n)

:# write code here

# n=0,f(0)=0

# n=1,f(1)=1

# n=2,f(2)=1

# f(n)=f(n-1)+f(n-2)

''' # 遞迴實現(會超時,時間複雜度為o(2^n))

if n<=1:

return n

return self.fibonacci(n-1)+self.fibonacci(n-2)

'''# for迴圈解法(時間複雜度為o(n))

if n<=1:

return n

# 當n>1 f(n)=f(n-1)+f(n-2)

a=1 b=

0 res=

0for i in

range(0

,n-1):

res=a+b

b=aa=res

return res

if __name__==

"__main__"

: s=solution(

)print

(s.fibonscci(4)

)

函式中return的作用

返復回乙個值給函式。

結束函式,不執行後面的語句。(例如你執行度到乙個地方,雖然後面還有**但是你不想問再繼續執行,這時你就可以直接用答 return;這條語句來結束函式。)

if __ name __==" __ main __" 的理解

題目描述:

設有f(n)種跳法,假設從第n階往前跳,f(n)分兩種情況:

當f(n)跳1階台階時,剩下f(n-1)種跳法;

當f(n)跳2階台階時,剩下f(n-2)種跳法;

所以,得出f(n)=f(n-1)+f(n-2),n>2

實現**如下:

class

solution

:def

jumpfloor

(self, number)

:# write code here

# number=0 沒有

# number=1 1

# number=2 2

# number=3 3

# number=4 5

# 通過找規律發現,f(n)=f(n-1)+f(n-2) 當n>2

# n=1 f(n)=1

# n=2 f(n)=2

# 這裡用for迴圈的方法實現

if number<3:

return number

a =1 b =

2 res =

0for i in

range(3

,number+1)

: res = a+b

a = b

b = res

return res

題目描述:設有f(n)種跳法,假設從第n階往前跳,f(n)分n種情況:

當f(n)跳1階台階時,剩下f(n-1)種跳法;

當f(n)跳2階台階時,剩下f(n-2)種跳法;

…當f(n)跳n-1階台階時,剩下f(1)種跳法;

當f(n)跳n階台階時,剩下f(0)種跳法;

所以,得出f(n)=f(n-1)+f(n-2)+…+f(1)+f(0) (由於f(0)=0,可忽略)

實現**如下:

class

solution

:def

jumpfloorii

(self, number)

:# write code here

''' #解法一:找規律得出公式

# number=1 1

# number=2 2

# number=3 4

# number=4 8

# number=n 2^(n-1)

# 得出f(n)=2^(n-1)

return pow(2,number+1)

'''#解法二:for迴圈解法

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

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

# f(n)=2f(n-1) 遞迴

if number==1:

return

1 a =

1 res =

0for i in

range(2

,number+1)

: res =2*a

a = res

return res

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

解題思路:

設有f(n)種方法,f(n)分兩種情況:

當小矩形一開始豎著放時,則還剩下2*(n-1)的空間,即還剩f(n-1)種放法;

當小矩形一開始橫著放時,則還剩下2*(n-2)的空間,即還剩f(n-2)種放法;

所以,得出f(n)=f(n-1)+f(n-2),n>2

實現**如下:

class

solution

:def

rectcover

(self, number)

:# write code here

# 通過找規律得出:f(n)=f(n-1)+f(n-2)

if number==0:

return

0if number==1:

return

1if number==2:

return

2 a =

1 b =

2for i in

range(3

,number+1)

: res = a+b

a = b

b = res

return res

劍指offer(Python)替換空格

這道題要求是 將乙個字串中的空格替換成 20 有多少個空格就替換成多少個 20 例如 hello world 中間有兩個空格,則需要輸出的形式是 hello 20 20world 字串首尾的空格亦算在內。class solution def replacespace self,s return 20...

劍指offer Python 替換空格

請實現乙個函式,將乙個字串中的每個空格替換成 20 python字串,有replace方法,可以實現替換,第乙個引數是要替換的內容,第二個引數是替換的新內容 能夠快速完成,果然python作為一種高階語言,不太適合做演算法 但是 replace 相當於 insert 在替換 時,會將原字串元素的位置...

《劍指offer》python 動態規劃

動態規劃是利用空間去換取時間的演算法.主要看 1.初始條件 2.重疊子問題 3.狀態轉移方程 題目描述 乙隻青蛙一次可以跳上1級台階,也可以跳上2級。求該青蛙跳上乙個n級的台階總共有多少種跳法 先後次序不同算不同的結果 coding utf 8 class solution def jumpfloo...