机试(一) chapter2.7 青蛙跳台阶和图形覆盖

本文详细解析了两个经典的递归算法问题:青蛙跳台阶的多种跳跃方式计数与使用2x1矩形覆盖2xn矩形的方案数量计算。通过递归函数getKinds和getTriangleKinds,展示了如何通过递归思想解决这类问题,并给出了具体的C++代码实现。

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

#include <iostream>
using  namespace std;


//青蛙跳台阶 1次跳一个,或者一次跳2个,求第n阶台阶的跳法有多少种
//如果全是跳1个,则只有一种跳法
//如果最后一跳是跳1个,则求出f(n-1)的跳法即可
//如果最后一条是跳2个,则求出f(n-2)的跳发即可
//递归

int getKinds(int n)
{
    int n_all = 0;
    if (n == 1) return 1;
    if (n == 2) return 2;
    // n> 2 的情况
    else
    {
        int n_1 = getKinds(n - 1);
        int n_2 = getKinds(n - 2);
        return n_1 + n_2;
    }
    
}


//图形覆盖问题
//用8个2x1的矩形 覆盖 2x8的大矩形
//记大矩形f(8) 若最后一个竖着摆,则要求f(7)
//               若最后一个横着摆,则倒数第二个一定是横着摆,则求出f(6)即可
// f(8) = f(7)+ f(6)

int getTriangleKinds(int n)
{
    int n_all = 0;
    if (n == 1) return 1;
    if (n == 2) return 2;
    // n> 2 的情况
    else
    {
        int n_1 = getKinds(n - 1);
        int n_2 = getKinds(n - 2);
        return n_1 + n_2;
    }

}


int main()
{
    int res = getKinds(3);
    cout << res << endl;
    system("pause");
    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值