zoukankan      html  css  js  c++  java
  • 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]
    为什么要坚持,想一想当初!
  • 相关阅读:
    《Orange'S:一个操作系统的实现》与上一版之比较
    IPC
    末日帝国——Agile公司的困境 (2)
    取经学道真经验——你听过这么享受的培训吗
    数据库设计指南(五)数据库小技巧
    软件项目开发典型风险一览
    数据库设计指南(四)保证数据的完整性
    官网的Ext direct包中.NET版的问题
    软件项目开发应写的13类文档
    面试EJB常考题
  • 原文地址:https://www.cnblogs.com/JerryZao/p/9531951.html
Copyright © 2011-2022 走看看