迭代實現
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
('總共有%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幼仔對...