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]