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]