python小代码13(递归函数&匿名函数)

什么是递归函数?
在函数内部,可以调用其他函数。
如果一个函数在内部调用自身本身,这个函数就是递归函数。

任务一:小孩的报酬*

任务内容:
一个小孩子给一个富翁做事,商量的报酬是第一天2角,第二天是第一天的2倍,依此类推,请问第20天后,这个小孩子能拿到多少钱?
1f
程序编写要求:
➢使用递归函数完成
➢结果输出如下图所示:
在这里插入图片描述

代码:

#第二天的报酬是第一天的二倍加上0.2元
def ff(n):
    if n !=1:
        return ff(n - 1) * 2 + 0.2
    else:
        return 0.2
    # if n == 1:
    #     return 0.2  # 递归停止
    # return ff(n - 1) * 2+0.2
def f(n):
    for i in range(1,n+1):
        print("第%d天的报酬为:%.1f"%(i,ff(i)))
f(20)

运行结果:

第1天的报酬为:0.2
第2天的报酬为:0.6
第3天的报酬为:1.4
第4天的报酬为:3.0
第5天的报酬为:6.2
第6天的报酬为:12.6
第7天的报酬为:25.4
第8天的报酬为:51.0
第9天的报酬为:102.2
第10天的报酬为:204.6
第11天的报酬为:409.4
第12天的报酬为:819.0
第13天的报酬为:1638.2
第14天的报酬为:3276.6
第15天的报酬为:6553.4
第16天的报酬为:13107.0
第17天的报酬为:26214.2
第18天的报酬为:52428.6
第19天的报酬为:104857.4
第20天的报酬为:209715.0

代码:

#第二天的报酬是第二天的二倍
def ff(n):
    if n !=1:
        return ff(n - 1) * 2
    else:
        return 0.2
    # if n == 1:
    #     return 0.2  # 递归停止
    # return ff(n - 1) * 2+0.2
def f(n):
    for i in range(1,n+1):
        print("第%d天的报酬为:%.1f"%(i,ff(i)))
f(20)

运行结果:

第1天的报酬为:0.2
第2天的报酬为:0.4
第3天的报酬为:0.8
第4天的报酬为:1.6
第5天的报酬为:3.2
第6天的报酬为:6.4
第7天的报酬为:12.8
第8天的报酬为:25.6
第9天的报酬为:51.2
第10天的报酬为:102.4
第11天的报酬为:204.8
第12天的报酬为:409.6
第13天的报酬为:819.2
第14天的报酬为:1638.4
第15天的报酬为:3276.8
第16天的报酬为:6553.6
第17天的报酬为:13107.2
第18天的报酬为:26214.4
第19天的报酬为:52428.8
第20天的报酬为:104857.6

任务二:猴子偷桃(递归改写)

任务内容:
猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个。第二天早上又将剩下的桃子吃掉一半又多吃了一个,以后每天早上都吃了前一天剩下的一半零一个。到第10天早上再想吃时,就剩下一个桃子了。 求第一天共摘多少个桃子?

程序编写要求:
➢使用递归函数完成
➢输出结果核对:第一天的桃子数是1534个

代码:

#第九天的桃=(第十天的桃+1)*2
#......
#第一天的桃=(第二天的桃+1)*2
def ff(day,peach):
    print("第%d天有%d个桃"%(day,peach))
    peach = (peach+1) * 2
    if day == 1:
        return peach
    return ff(day-1,peach)
ff(10,1)

运行结果:

第10天有1个桃
第9天有4个桃
第8天有10个桃
第7天有22个桃
第6天有46个桃
第5天有94个桃
第4天有190个桃
第3天有382个桃
第2天有766个桃
第1天有1534个桃

任务三:斐波纳契数列之谜(递归改写)

任务内容:
前两个数都为1,从第三个数起每一个数为前两个数之和。要求输出此数列的前20个数

程序编写要求:
➢使用递归函数完成

代码:

def ff(n):
    if n == 1:
        return 1
    elif n == 2:
        return 1
    else:
        return ff(n - 1) + ff(n - 2)
def main(n):
    for i in range(1, n+1):
        print("第%d个数为:%d"%(i,ff(i)))
main(20)

运行结果:

第1个数为:1
第2个数为:1
第3个数为:2
第4个数为:3
第5个数为:5
第6个数为:8
第7个数为:13
第8个数为:21
第9个数为:34
第10个数为:55
第11个数为:89
第12个数为:144
第13个数为:233
第14个数为:377
第15个数为:610
第16个数为:987
第17个数为:1597
第18个数为:2584
第19个数为:4181
第20个数为:6765

任务四:求长方形的面积

任务内容:
要求从键盘输入长方形的长和宽,要求输出该长方形的面积。

程序编写要求:
➢使用匿名函数完成
➢输出如下所示:
在这里插入图片描述
代码:

area=lambda length,wide:length*wide
a=float(input("请输入长方形的长:"))
b=float(input("请输入长方形的宽:"))
print("长方形的面积是:",area(a,b))

运行结果:

请输入长方形的长:12.4
请输入长方形的宽:2.8
长方形的面积是: 34.72
请输入长方形的长:5
请输入长方形的宽:7
长方形的面积是: 35.0

任务五:使用递归函数实现阶乘

代码:

def ff(n):
    if n == 1:
        return 1 #递归停止
    return n * ff(n - 1)
print(ff(5))      # 输出结果: 120
print(ff(10))      # 输出结果: 3628800

任务六:使用递归函数,计算1到100之间相加之和

代码:

def sum(n):
    if n > 0:
        return n + sum(n - 1)
    else:
        return 0 #==0时递归停止
print(sum(100)) #结果为:5050
  • 8
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值