[Python基础 ] Day_10_作业_参考答案

Day_10_Homework_Answer

''''''

# 函数递归: 函数内部调用自身
'''
5!  = 5 * 4!
    = 5 * 4 * 3!
    = 5 * 4 * 3 * 2!
    = 5 * 4 * 3 * 2 * 1
'''
# 使用递归:
#   1. 找公式, 如: f(n) = n * f(n-1)
#   2. 找临界值, 如: n=1, f(1)=1
#   3. 一定要相信函数能实现

# 求n的阶乘
def fn(n):
    if n == 1:
        return 1
    return n * fn(n-1)
        #  5 * fn(4)
        #  5 * 4 * fn(3)
        #  5 * 4 * 3 * fn(2)
        #  5 * 4 * 3 * 2 * fn(1)
        #  5 * 4 * 3 * 2 * 1

print(fn(5))


# 1.封装函数,传入n,得到 第n个 斐波那契数
#          1 1 2 3 5 8 13 21 34 55, ...
#
# 找公式: f(n) = f(n-1) + f(n-2)
# 临界值: n=1,2; f(1)=f(2)=1

def f(n):
    if n<=2:
        return 1
    return f(n-1) + f(n-2)

print(f(8))


# 2.封装函数,传入n,得到 前n个 斐波那契数
#          1 1 2 3 5 8 13 21

def f2(n):
    for i in range(1, n+1):
        print(f(i), end=" ")

print()

f2(20)

print()
print()

# 1.兔子繁殖问题。
#     设有一对新生的兔子,从第4个月开始他们每个月月初都生一对新兔子,
#     新生的兔子从第4个月开始又每个月月初生一对兔子。
#     按此规律,并假定兔子没有死亡,20个月末共有多少对兔子?

'''
        1月大兔   2月大兔   3月大兔   4月大兔(包含大于4月兔)    兔子总对数
       
第1个月    1        0        0        0                      12个月    0        1        0        0                      13个月    0        0        1        0                      14个月    1        0        0        1                      2 = 1 + 15个月    1        1        0        1                      3 = 2 + 16个月    1        1        1        1                      4 = 3 + 17个月    2        1        1        2                      6 = 4 + 28个月    3        2        1        3                      9 = 6 + 39个月    4        3        2        4                      13 = 9 + 410个月   6        4        3        6                      19 = 13 + 6

f(n) = f(n-1) + f(n-3)
n=1,2,3; f(n)=1

'''

def fx(n):
    if n<=3:
        return 1
    return fx(n-1) + fx(n-3)

print(fx(10))

猜你喜欢

转载自blog.csdn.net/weixin_44298535/article/details/107762061