递归函数和闭包

练习,不断练习

#!/usr/bin/python3
# -*- coding: UTF-8 -*-
"""
@File:study.py
@Description: 描述
@Author:yeqinfang
@Email:yeqinfang@yeah.net
@Date: 2020/05/12
"""
# 递归函数和闭包
# 截止时间:05月13日09:00
# 1、小明买了一对小兔子(两只),第三个月起每个月都生一对兔子(两只),每对小兔子长到第三个月后每个月又生一对兔子(两只)
# ,假如兔子都不死,问n个月的后的兔子总数为多少只?请使用递归实现!
print("第一题解答:")


# 规律:[1,1,2,3,5,8 ...]*2
def func1(n):
    if n == 1 or n == 2:
        return 2
    else:
        return func1(n - 1) + func1(n - 2)


print(func1(10))

# 2 一个球从100米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在第10次落地时,共经过多少米?请用递归实现!
print("第二题解答:")


# 规律:[100,50,50,25,25,12.5,12.5 ...]->每次落地:[100,100,50,25,12.5 ...]
def func2(n):
    if n == 1:
        return 100
    if n == 2:
        return 200
    else:
        return func2(n - 1) + 100 / 2 ** (n - 2)


print(func2(10))

# 3、小明有200元钱 打算买200本书,A类书籍5元一本,B类书籍3元一本,C类书籍1元2本,请用程序算出小明一共有多少种买法?(面试笔试题)
print("第三题解答:")
# 思路:先计算200块钱每类书能买多少本,接着在限制内对条件进行筛选,筛选条件为:(1)书的总数为200(2)花费的钱,不能超过200
book = 200
money = 200
num = 0
for a in range(money // 5):
    for b in range(money // 3):
        for c in range(money * 2):
            if a * 5 + b * 3 + c * 0.5 <= 200 and a + b + c == 200:
                num += 1
print(num)
# 4、有一个列表 li2 = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],
# 请用上课讲的知识处理成下面的格式:
# li4 = [[1,2,3],[4,5,6],[7,8,9],[10,11,12],[13,14,15]]
print("第四题解答:")
li2 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]
step = 3
li4 = [li2[i:i + step] for i in range(0, len(li2), step)]
print(li4)

if __name__ == '__main__':
    pass

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Lion King

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值