Python-遞歸練習題


1、求階乘

 1 # no 1
 2 def facl(n):
 3     if n == 1:
 4         return 1
 5     return  facl(n-1) * n
 6  # return 1 if n ==1 else facl(n-1) * n
 7 print(facl(3))
 8 # no 2
 9 def facl1(n,a=1):# 利用之前的值
10     if n == 1:
11         return a
12     a = a * n
13     return facl1(n-1, a)
14 
15 print(facl1(3))

2、猴子吃桃

 1 '''
 2 
 3 問題簡述:一只小猴子吃桃子的問題。
 4 話說,一只小猴子第一天摘下若干個桃子,並吃了一半。
 5 感覺到吃的還不癮,於是又多吃了一個;
 6 第二天早上,又將剩下的桃子吃掉一半,又多吃了一個。
 7 以后每天早上,都吃了前一天剩下的一半零一個。
 8 python問題:
 9 請問,到了第10天早上想再吃時,卻發現只剩下一個桃子了。
10 求第一天共摘了多少?
11 
12 # 逆向思維
13 s2 = 1
14 for day in range(9,0,-1):
15     s1 = (s2 + 1)*2
16     s2 = s1
17 print(s1)
18 '''
19 # no 1
20 def foo(n=10, a=1): # n = 10 是因為 當n = 2的時候已經是答案了,但是此時的 獲取不到a 要等 n==1 的時候去獲取a
21     if n == 1:
22         return a
23     a = (a + 1) * 2
24     return  foo(n-1, a)
25 
26 print((foo(10))) # 1534
27 
28 # no 2    n只是一個循環條件
29 def foo(n=10):
30     if n == 1:
31         return 1
32     return (foo(n-1) + 1) * 2
33 
34 print(foo())
35 
36 def foo(n=1):
37     if n == 10:
38         return 1
39     return (foo(n+1) + 1) * 2
40 
41 print(foo())

 3、將一個數逆序放入列表中 如:1234----【4,3,2,1】

 1 # no 1 使用字符串索引
 2 l = '1234'
 3 length = len(l)
 4 def foo(length , lst=[]):
 5     if length == 0:
 6         return lst
 7     lst.append(l[length-1])
 8     return foo(length-1,lst)
 9 
10 print((foo(length))) # ['4', '3', '2', '1']
11 
12 # 遞歸去字符
13 l = '1234'
14 
15 def revert(x):
16     if x == -1:
17         return []
18     return [l[x]] + revert(x-1) # 每次生成新的列表
19 
20 print(revert(len(l) - 1)) # 索引取
21 
22 # no 3
23 l = '1234'
24 
25 def foo(x, target=[]):
26     if x:
27         target.append(x[-1])
28         foo(x[:-1]) # 每次切片,每次都娶不到最后一個數字,(這里遞放在函數體內)
29     return target
30 
31 print(foo(l))
32 
33 # no 4 使用數字整除 取模遞歸,使用了 divmod() 內建函數
34 def foo(x, target=None):# 使用缺省值None 而不是用[] ,避免修改函數的屬性
35     if target == None:
36         target = []
37     x, v = divmod(x, 10)
38     target.append(v)
39     if x == 0:
40         return target
41     return foo(x, target)  # 
42 
43 print(foo(1234)) # [4, 3, 2, 1]

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM