递归与数学归纳法(RMI):Recursion and mathematical induction
递归:程序调用自身的编程技巧称为递归,即通过多次递归调用来化简复杂的问题。
数学归纳法:证明当n=1时命题成立,假设n=m时命题成立,那么可以推导出在n=m+1时命题也成立。
规则:an= fa(n-1) $ fa(n-2) $ fa(n-3) $ ....($和f为某种运算规则)
一阶:an= fa(n-1)
二阶:an= fa(n-1) $ fa(n-2)
三阶:an= fa(n-1) $ fa(n-2) $ fa(n-3)
...
原理:an = a1 + (n-1)d (a1为首项,d为公差)
数学归纳法
a1=a
a2=a1+d
a3=a2+d=a1+2d
...
an=a1+(n-1)d
递归
# python
a1=2 # 首项
d=1 # 公差
n=3 # 第n项
def f(n):
if n==1:return a1
else return f(n-1) + d
an=f(n)
原理:an = a1 * q^(n-1) (a1为首项,q为公比)
数学归纳法
a1=a
a2=a1*q
a3=a2*q=a1*q*q
...
an=a1*q^(n-1)
递归
# python
a1=2 # 首项
q=2 # 公比
n=3 # 第n项
def f(n):
if n==1:return a1
else return f(n-1) * q
an=f(n)
原理:an = a(n-1)+ a(n-2)
数列: 1 1 2 3 5 8 13 ...
数学归纳法
a1=1
a2=1
a3=a1+a2
a4=a2+a3
...
an=a(n-1)+ a(n-2)
递归
# python
n=5 # 第n项
def f(n):
if n==1 or n==2:return 1 # 第一项第二项为1
else return f(n-1)+f(n-2)
an=f(n)
原理:汉诺塔(Tower of Hanoi),又称河内塔,是一个源于印度古老传说的益智玩具。大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘。大梵天命令婆罗门把圆盘从下面开始按大小顺序重新摆放在另一根柱子上。并且规定,在小圆盘上不能放大圆盘,在三根柱子之间一次只能移动一个圆盘。
解析(捆绑法):将多个转化成 "1"+1 ,即上面的(i-1)个和最下面的一个(即i-1和i),
先把上面的(i-1)个移到中间柱子,然后最下面的移到最后一个柱子,然后重复转换,直至最后一个移到最后一根柱子
数学归纳法
1:f(1,A,B,C)=mov(1); 1->C
2:f(2,A,B,C)=f(1,A,C,B)+mov(2)+f(1,B,A,C); (1->B), 2->C ,(1->C)
3:f(3,A,B,C)=f(2,A,C,B)+mov(3)+f(2,B,A,C); (1->C,2->B,1->B), 3->C ,(1->A,2->C,1->C)
...
n:f(n,A,B,C)=f(n-1,A,C,B)+mov(n)+f(n-1,B,A,C);
递归
def hanoi(n, a, b, c):
if n == 1:
print(a, '-->', c)
else:
hanoi(n - 1, a, c, b)
print(a, '-->', c)
hanoi(n - 1, b, a, c)
# 调用
hanoi(5, 'A', 'B', 'C')
原理:每次可以跨1-3个阶梯,求到第n阶有多少种方法
an = a(n-1) + a(n-2) + a(n-3)
数学归纳法
a1=1 (1)
a2=2 (11,2)
a3=4 (111,12,21,3)
a4=a1+a2+a3
...
an = a(n-1) + a(n-2) + a(n-3)
递归
# python
def f(n):
if n==1:return 1
elif n==2: return 2
elif n==3: return 4
else return f(n-1) + f(n-2) + f(n-3)
an=f(n)
原理:an = a(n-1) + a(n-2) + a(n-3) +a(n-4)+ ...a(n-m)
数学归纳法
a1,a2,a3...am
a(m+1)=a1+a2+a3...+am
...
an = a(n-1) + a(n-2) + a(n-3) +a(n-4)+ ...a(n-m)
递归
# python
n=k # 第n项
def f(n):
if n==1:return a1
elif n==2:return a2
elif ...
elif n==m:return am
else return f(n-1)+f(n-2)+...f(n-m)
an=f(n)
数学归纳法:通过数列之间的关系将其通过某种运算使其产生联系,用有穷举例法验证。
递归:将数学归纳法,通过分解,将多项直接分成两部分,第一部分可以直接返回结果的,
第二部分通过递归调用使其跟数列项之间的关系返回结果,从而简化复杂的问题
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。