三个特点:
1、要有确定的结束条件
2、问题规模要一步一步的减小
3、函数的等价关系式
问题一:阶乘
def f(n):
if n == 1:
return 1#确定的结束条件
return n*f(n-1)#函数关系:f(n)=n*f(n-1)、问题规模不断缩小:n-1
问题二:斐波那契数列
指的是这样一个数列:1、1、2、3、5、8、13、21、34
在数学上,斐波那契数列以如下被以递推的方法定义:F(1)=1,F(2)=1, F(n)=F(n - 1)+F(n - 2)(n ≥ 3,n ∈ N*),这个问题可以用到许多场景,如兔子问题,青蛙跳台阶问题
# 这个只是求数列中的第几个数
def fibs(n):
if n == 1:
return 1 #结束条件
if n == 2:
return 1 #结束条件
return fibs(n-1) + fibs(n-2)#关系,缩小规模
print(fibs(6))
def fib(n):
if n == 1:
return [1]
if n == 2:
return [1, 1]
fibs = [1, 1]
for i in range(2, n):
fibs.append(fibs[-1] + fibs[-2])#关系
return fibs
# 输出前 10 个斐波那契数列
print(fib(10))
问题三:打印出杨辉三角形
1 1 1 1 2 1 1 3 3 1 1 4 6 4 1 1 5 10 10 5 1 1 6 15 20 15 6 1 1 7 21 35 35 21 7 1 1 8 28 56 70 56 28 8 1 1 9 36 84 126 126 84 36 9 1
# 递归求出每个值
def f(i,j):
if j == 1 or i==j:
return 1
return f(i-1,j-1)+f(i-1,j)
for i in range(1,11):
for j in range(1,i+1):
print(f(i,j), end=' ')
print()