遞迴與斐波那契數列

2021-10-02 06:40:57 字數 2394 閱讀 2819

迭代實現

def

fab(n)

: a1=

1 a2=

1 a3=

1if n<1:

print

("輸入有誤!"

)return-1

while

(n-2

)>0:

a3=a1+a2

a1=a2

a2=a3

a -=

1return a3

result = fab(20)

if result!=-1

:print

('總共有%d對小兔子誕生'

% result)

遞迴的思想

('輸入有誤!'

)return-1

if n==

1or n==2:

return

1else

:return fab(n-1)

+fab(n-2)

result = fab(20)

if result!=-1

:print

('總共有%d對小兔子誕生'

% result)

總共有6765對小兔子誕生

課後題:

1.使用遞迴編寫乙個十進位制轉換為二進位制的函式(要求採用「取2取餘」的方式,結果與呼叫bin()一樣返回字串形式)。

2.寫乙個函式get_digits(n),將引數n分解出每個位的數字並按順序存放到列表中。舉例:get_digits(12345) ==> [1, 2, 3, 4, 5]

3.還記得求回文字串那道題嗎?現在讓你使用遞迴的方式來求解,親還能驕傲的說我可以嗎?

4.使用遞迴程式設計求解以下問題:

有5個人坐在一起,問第五個人多少歲?他說比第4個人大2歲。問第4個人歲數,他說比第3個人大2歲。問第三個人,又說比第2人大兩歲。問第2個人,說比第乙個人大兩歲。最後問第乙個人,他說是10歲。請問第五個人多大?

解:1.

def

dec2bin

(dec)

: result =

''if dec:

result = dec2bin(dec//2)

return result +

str(dec%2)

else

:return result

print

(dec2bin(62)

)

result =

defget_digits

(n):

if n >0:

result.insert(

0, n%10)

get_digits(n//10)

get_digits(

12345

)print

(result)

def

is_palindrome

(n, start, end)

:if start > end:

return

1else

:return is_palindrome(n, start+

1, end-1)

if n[start]

== n[end]

else

0

string =

input

('請輸入一串字串:'

)length =

len(string)-1

if is_palindrome(string,

0, length)

:print

('"%s"是回文字串!'

% string)

else

:print

('"%s"不是回文字串!'

% string)

def

age(n)

:if n ==1:

return

10else

:return age(n-1)

+2print

('哈哈,我知道了,第五個人的年齡是 %d 歲,啵啵脆!'

% age(5)

)

斐波那契數列,遞迴與迴圈

斐波那契數列 fibonacci sequence 又稱 分割數列 兔子數列,是數學家列昂納多 斐波那契於1202年提出的數列。斐波那契數列為1 1 2 3 5 8 13 21 34 此數列從第3項開始,每一項都等於前兩項之和,遞推公式為f n f n 1 f n 2 n 3,f 1 1,f 2 1...

斐波那契數列 遞迴與非遞迴

首先來說下遞迴,遞迴的思想是大事化小。斐波那契數列 1,1,2,3,5,8,13,21.設f n 是第n個斐波那契數,當n 2,斐波那契數都為1 當n 2,那麼第f n 個斐波那契數就等於前兩個斐波那契數之和。遞迴的 實現 includeint fbnq int n int main 輸入10,得到...

遞迴演算法斐波那契數列

有一對兔子,從出生後第3個月起,每個月都生一對兔子,小兔子長到第三個月後每個月又生一對兔子。假如兔子都不死,求第n個月兔子對數 關於斐波那契數列的兔子繁殖問題其實如下 實際月份 123 4567 8幼仔對數 101 1235 8成兔對數 011 2358 13總體對數 112 35813 21幼仔對...