死磕递归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)=12
n = 3 n=3 n=3 f ( 3 ) = 1 ∗ 2 ∗ 3 f(3)=1*2*3 f(3)=123
n = 4 n=4 n=4 f ( 4 ) = 1 ∗ 2 ∗ 3 ∗ 4 f(4)=1*2*3*4 f(4)=1234
n = 5 n=5 n=5 f ( 5 ) = 1 ∗ 2 ∗ 3 ∗ 4 ∗ 5 f(5)=1*2*3*4*5 f(5)=12345

更一般的递推公式有
f ( n ) = f ( n − 1 ) ∗ n f(n)=f(n-1)*n f(n)=f(n1)n

也就是说我想要求解 f ( n ) f(n) f(n),那么我只需要把 f ( n − 1 ) f(n-1) f(n1)求解出来即可,但是为了求解 f ( n − 1 ) f(n-1) f(n1),我需要把 f ( n − 2 ) f(n-2) f(n2)求解出来,说白了就是不断的套娃。简单看一下 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)=123456=f(5)6LeetCode70. 爬楼梯

从一道NOI练习题说递推和递归

c语言 设计 爬楼梯的方法

[每日一题2020.06.14]leetcode #70 爬楼梯 斐波那契数列 记忆化搜索 递推通项公式

LeetCode 70 - 爬楼梯 - [递推+滚动优化]

递归法——爬楼梯(简单)