【C++练习】基于递归函数计算小青蛙跳台阶问题

题目:小青蛙跳台阶问题

问题描述

一只小青蛙想要跳上一段有n级台阶的楼梯。小青蛙每次跳跃时,可以选择跳1级台阶或者2级台阶。请你编写一个程序,计算小青蛙跳上这段n级台阶楼梯共有多少种不同的跳法。

要求

  • 输入一个正整数n,表示台阶的总级数(1 ≤ n ≤ 100)。
  • 输出一个整数,表示小青蛙跳上n级台阶的不同跳法总数。
  • 输出具体的跳跃方法分别有哪些。

主要流程图:

源代码:

#include <iostream>  
#include <vector>  
using namespace std;

// 辅助函数,用于回溯并打印所有跳跃组合  
void printJumps(const vector<int>& jumps) {
    for (int jump : jumps) {
        cout << jump << " ";
    }
    cout << endl;
}

// 递归函数,用于生成所有跳跃组合  
void generateJumps(int n, int current, vector<int>& jumps, vector<vector<int>>& allJumps) {
    if (current == n) {                                                                                                                                  
        // 当达到目标台阶数时,打印当前组合                                                                                               
        allJumps.push_back(jumps);                                                                                                                 
        return;                                                                                                                                              
    }                                                                                                                                                               
    if (current > n) {                                                                                                                                        
        // 如果当前台阶数超过目标,则回溯                                                                                                           
        return;                                                                                                                                                         
    }

    // 尝试跳1级  
    jumps.push_back(1); 
    generateJumps(n, current + 1, jumps, allJumps); 
    jumps.pop_back();

    // 尝试跳2级(如果当前不是最后一级的话)  
    if (current + 2 <= n) {
        jumps.push_back(2);
        generateJumps(n, current + 2, jumps, allJumps);
        jumps.pop_back();
    }
}

int main() {
    int n;
    cout << "请输入台阶数: ";
    cin >> n;

    // 确保输入为正整数  
    if (n < 1) {
        cout << "请输入一个正整数。" << endl;
        return 1;
    }

    vector<int> jumps;
    vector<vector<int>> allJumps;

    // 生成所有跳跃组合  
    generateJumps(n, 0, jumps, allJumps);

    // 输出结果  
    cout << "小青蛙跳上" << n << "级台阶的方法数是: " << allJumps.size() << endl;
    cout << "具体的跳跃方法有:" << endl;
    for (const vector<int>& jumpSequence : allJumps) {
        printJumps(jumpSequence);
    }

    return 0;
}

运行截图:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值