死磕递归1:递推公式
Posted 我家大宝最可爱
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了死磕递归1:递推公式相关的知识,希望对你有一定的参考价值。
1. 递推公式
证明
f
(
n
)
=
5
n
+
3
f(n)=5^n+3
f(n)=5n+3可以被4整除
先看几个具体的case,看看能不能被4整除
n n n | f ( n ) = 5 n + 3 f(n)=5^n+3 f(n)=5n+3 |
---|---|
n = 1 n=1 n=1 | f ( 1 ) = 5 1 + 3 = 8 f(1)=5^1+3=8 f(1)=51+3=8 |
n = 2 n=2 n=2 | f ( 2 ) = 5 2 + 3 = 28 f(2)=5^2+3=28 f(2)=52+3=28 |
n = 3 n=3 n=3 | f ( 3 ) = 5 3 + 3 = 128 f(3)=5^3+3=128 f(3)=53+3=128 |
查看了几个case发现都是可以被4整除的,那么如何证明任意一个n都可以让
5
n
+
3
5^n+3
5n+3被4整除呢?前面通过实际的数据表明n=3的时候是可以被4整除的,那么n=4可以被4整除吗
f
(
4
)
=
5
4
+
3
=
5
×
5
3
+
3
=
4
×
5
3
+
5
3
+
3
=
4
×
5
3
+
f
(
3
)
\\beginaligned f(4) & =5^4+3\\\\ & =5\\times 5^3+3\\\\ &=4\\times 5^3+5^3+3\\\\ &=4\\times 5^3+f(3) \\endaligned
f(4)=54+3=5×53+3=4×53+53+3=4×53+f(3)
可以发现
4
×
5
3
4\\times 5^3
4×53可以被4整除,而且
f
(
3
)
f(3)
f(3)也是可以被4整除的,因此
f
(
4
)
f(4)
f(4)可以被4整除。更一般的有递推公式
f
(
k
+
1
)
=
5
k
+
1
+
3
=
5
×
5
k
+
3
=
4
×
5
k
+
5
k
+
3
=
4
×
5
k
+
f
(
k
)
\\beginaligned f(k+1) & =5^k+1+3\\\\ & =5\\times 5^k+3\\\\ &=4\\times 5^k+5^k+3\\\\ &=4\\times 5^k+f(k) \\endaligned
f(k+1)=5k+1+3=5×5k+3=4×5k+5k+3=4×5k+f(k)
递推公式已经被我们写出来了,可以看到如果 f ( k ) f(k) f(k)可以被4整除,那么 f ( k + 1 ) f(k+1) f(k+1)就一定可以被4整除。我们从1开始计算
- 1可以被4整除,那么一定有2可以被4整除
- 2可以被4整除,那么一定有3可以被4整除
- …
依次进行下去,也就是说任意一个整数都可以符合。
2. 如何求解 n ! n! n!
再看一个问题,如何求解 n ! n! n!,这个问题也非常的简单,我们直接从1开始一直乘到n就可以得到了
res = 1
for i in range(1,n+1):
res *= i
我们这里可以考虑递归,说白了就是求递推公式,我们也从最简单的n=1开始计算
n n n | f ( n ) = n ! f(n)=n! f(n)=n! |
---|---|
n = 1 n=1 n=1 | f ( 1 ) = 1 f(1)=1 f(1)=1 |
n = 2 n=2 n=2 | f ( 2 ) = 1 ∗ 2 f(2)=1*2 f(2)=1∗2 |
n = 3 n=3 n=3 | f ( 3 ) = 1 ∗ 2 ∗ 3 f(3)=1*2*3 f(3)=1∗2∗3 |
n = 4 n=4 n=4 | f ( 4 ) = 1 ∗ 2 ∗ 3 ∗ 4 f(4)=1*2*3*4 f(4)=1∗2∗3∗4 |
n = 5 n=5 n=5 | f ( 5 ) = 1 ∗ 2 ∗ 3 ∗ 4 ∗ 5 f(5)=1*2*3*4*5 f(5)=1∗2∗3∗4∗5 |
更一般的递推公式有
f
(
n
)
=
f
(
n
−
1
)
∗
n
f(n)=f(n-1)*n
f(n)=f(n−1)∗n
也就是说我想要求解
f
(
n
)
f(n)
f(n),那么我只需要把
f
(
n
−
1
)
f(n-1)
f(n−1)求解出来即可,但是为了求解
f
(
n
−
1
)
f(n-1)
f(n−1),我需要把
f
(
n
−
2
)
f(n-2)
f(n−2)求解出来,说白了就是不断的套娃。简单看一下
f
(
6
)
f(6)
f(6)是如何计算
f
(
6
)
=
1
∗
2
∗
3
∗
4
∗
5
∗
6
=
f
(
5
)
∗
6
=
f
(
4
)
∗
5
∗
6
=
f
(
3
)
∗
4
∗
5
∗
6
=
f
(
2
)
∗
3
∗
4
∗
5
∗
6
=
f
(
1
)
∗
2
∗
3
∗
4
∗
5
∗
6
=
1
∗
2
∗
3
∗
4
∗
5
∗
6
\\beginaligned f(6)&=1*2*3*4*5*6\\\\ &=f(5)*6\\\\ &=f(4)*5*6\\\\ &=f(3)*4*5*6\\\\ &=f(2)*3*4*5*6\\\\ &=f(1)*2*3*4*5*6\\\\ &=1*2*3*4*5*6\\ \\endaligned
f(6)=1∗2∗3∗4∗5∗6=f(5)∗6LeetCode70. 爬楼梯