青蛙跳台阶

本文详细解析了青蛙跳台阶问题,探讨了不同跳法的数量计算方法,包括递归、自底向上递推及数学公式解法,揭示了其与斐波那契数列的内在联系。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

青蛙跳台阶

问题描述:
一只青蛙一次可以跳一个台阶,也可以跳两个台阶。求青蛙跳上 nnn 级台阶有多少种跳法?


问题分析

图片 青蛙跳到第一级台阶只有一种跳法(即从初始位置跳一级台阶)

跳到第二级台阶有两种跳法(即从初始位置跳两级,要么一级一级的跳)

设函数f(n)f(n)f(n)为青蛙跳台阶的种数,nnn为台阶级数,n=0n=0n=0表示青蛙在初始位置,f(0)=1f(0)=1f(0)=1

由此可知:

f(1)=1f(1)=1f(1)=1,跳到第一级台阶只有一种跳法;

f(2)=f(0)+f(1)f(2)=f(0)+f(1)f(2)=f(0)+f(1),跳到第二级台阶要么从初始位置跳两步,要么就从第一级台阶跳一步;

f(3)=f(1)+f(2)f(3)=f(1)+f(2)f(3)=f(1)+f(2),跳到第三级台阶要么从第一级台阶跳两步,要么就从第二级台阶跳一步;

由此可以得到规律:

f(n)=f(n−2)+f(n−1)f(n)=f(n-2)+f(n-1)f(n)=f(n2)+f(n1),跳到第 nnn 级台阶要么从第 n−2n-2n2 级台阶跳两步,要么就从第 n−1n-1n1 级台阶跳一步;

f(n){1(n=1)f(n)=f(n−2)+f(n−1)(n≥2) f(n) \begin{cases} 1\quad&(n=1)\\ f(n)=f(n-2)+f(n-1)\quad&(n\geq2)\\ \end{cases} f(n){1f(n)=f(n2)+f(n1)(n=1)(n2)

其实这就是斐波那契数列,11235…n1\quad1\quad2\quad3\quad5\ldots n11235n


解法

  • 递归

    int f(int n)
    {
        if (n == 0 || n == 1)
            return 1;
        else
            return f(n - 2) + f(n - 1);
    }
    
  • 自底向上的递推

    int f(int n)
    {
        int a = 1, b = 1, c;
        if (n == 0 || n == 1)
            return 1;
        else
            for (int i = 2; i <= n; i++)
            {
                c = a + b;
                a = b;
                b = c;
            }
        return c;
    }
    
  • 数学公式

    转化为数学问题,其实也就是:

    已知 an=an−1+an−2(n>2)a_n=a_{n-1}+a_{n-2} (n>2)an=an1+an2(n>2)a1=1a_1=1a1=1a2=1a_2=1a2=1 ,求 ana_nan 的通项公式。

    解:构造特征方程 x2−x−1=0x^2-x-1=0x2x1=0 ,设α\alphaαβ\betaβ 为方程的两个根。解得:

    α=1−52\alpha=\frac{1-\sqrt{5}}{2}α=215β=1+52\beta=\frac{1+\sqrt{5}}{2}β=21+5

    根据 an=Pan−1+Qan−2a_n=Pa_{n-1}+Qa_{n-2}an=Pan1+Qan2 型数列的通项公式可计算 ana_nan 的通项公式:
    an=(1+52)n−(1−52)n5 a_n=\frac{(\frac{1+\sqrt{5}}{2})^n-(\frac{1-\sqrt{5}}{2})^n}{\sqrt{5}} an=5(21+5)n(215)n


    类似 an=Pan−1+Qan−2a_n=Pa_{n-1}+Qa_{n-2}an=Pan1+Qan2 这样的数列,求 ana_nan 通项公式:

    构造特征方程 x2−P⋅x−Q=0x^2-P \cdot x - Q = 0x2PxQ=0,设α\alphaαβ\betaβ 为方程的两个根

    P=α+βP=\alpha + \betaP=α+βQ=−α⋅βQ=- \alpha \cdot \betaQ=αβ,则:
    an=(α+β)an−1−αβ⋅an−2an−α⋅an−1=β⋅(an−1−α⋅an−2)an−α⋅an−1an−1−α⋅an−2=β \begin{aligned} a_n=(\alpha + \beta)&a_{n-1}-\alpha \beta \cdot a_{n-2}\\ \quad\\ a_n-\alpha \cdot a_{n-1} &= \beta \cdot (a_{n-1}-\alpha \cdot a_ {n-2})\\ \quad\\ \frac{a_n-\alpha \cdot a_{n-1}}{a_{n-1}-\alpha \cdot a_{n-2}}&=\beta\\ \end{aligned} an=(α+β)anαan1an1αan2anαan1an1αβan2=β(an1αan2)=β
    即数列 {an+1−α⋅an}\{a_{n+1}-\alpha \cdot a_n\}{an+1αan} 是以 a2−α⋅a1a_2-\alpha \cdot a_1a2αa1 为首项,以 β\betaβ 为公比的等比数列,则:
    an+1−α⋅an=(a2−α⋅a1)⋅βn−1an+1βn+1−αβ⋅anβn=a2−α⋅a1β2an+1βn+1+a2−α⋅a1β(α−β)=αβ[anβn+a2−α⋅a1β(α−β)] a_{n+1}-\alpha \cdot a_n = (a_2-\alpha \cdot a_1) \cdot \beta^{n-1}\\ \quad\\ \frac{a_{n+1}}{\beta^{n+1}}-\frac{\alpha}{\beta}\cdot\frac{a_n}{\beta^n}=\frac{a_2-\alpha \cdot a_1}{\beta^2} \quad\\ \quad\\ \frac{a_{n+1}}{\beta^{n+1}}+\frac{a_2-\alpha \cdot a_1}{\beta(\alpha-\beta)}=\frac{\alpha}{\beta}[\frac{a_n}{\beta^n}+\frac{a_2-\alpha \cdot a_1}{\beta(\alpha-\beta)}] an+1αan=(a2αa1)βn1βn+1an+1βαβnan=β2a2αa1βn+1an+1+β(αβ)a2αa1=βα[βnan+β(αβ)a2αa1]
    即数列 {anβn+a2−α⋅a1β(α−β)}\{\frac{a_n}{\beta^n}+\frac{a_2-\alpha \cdot a_1}{\beta(\alpha-\beta)}\}{βnan+β(αβ)a2αa1} 是以 a1β+a2−α⋅a1β(α−β)\frac{a_1}{\beta}+\frac{a_2-\alpha \cdot a_1}{\beta(\alpha-\beta)}βa1+β(αβ)a2αa1 为首项,以αβ\frac{\alpha}{\beta}βα 为公比的等比数列,则:
    anβn+a2−α⋅a1β(α−β)=[a1β+a2−α⋅a1β(α−β)](αβ)n−1an=a2(αn−1−βn−1)+a1(αβn−1−αn−1β)α−β \frac{a_n}{\beta^n}+\frac{a_2-\alpha \cdot a_1}{\beta(\alpha-\beta)}=[\frac{a_1}{\beta}+\frac{a_2-\alpha \cdot a_1}{\beta(\alpha-\beta)}](\frac{\alpha}{\beta})^{n-1}\\ \quad\\ a_n=\frac{a_2(\alpha^{n-1}-\beta^{n-1})+a_1(\alpha\beta^{n-1}-\alpha^{n-1}\beta)}{\alpha-\beta} \quad\\ βnan+β(αβ)a2αa1=[βa1+β(αβ)a2αa1](βα)n1an=αβa2(αn1βn1)+a1(αβn1αn1β)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值