递归函数和闭包

练习,不断练习

#!/usr/bin/python3
# -*- coding: UTF-8 -*-
"""
@File:study.py
@Description: 描述
@Author:yeqinfang
@Email:[email protected]
@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

猜你喜欢

转载自blog.csdn.net/weixin_43431593/article/details/106183164