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 1
第2个月 0 1 0 0 1
第3个月 0 0 1 0 1
第4个月 1 0 0 1 2 = 1 + 1
第5个月 1 1 0 1 3 = 2 + 1
第6个月 1 1 1 1 4 = 3 + 1
第7个月 2 1 1 2 6 = 4 + 2
第8个月 3 2 1 3 9 = 6 + 3
第9个月 4 3 2 4 13 = 9 + 4
第10个月 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))