Java 华为真题-猴子爬山

需求:

一天一只顽猴想去从山脚爬到山顶,途中经过一个有个N个台阶的阶梯,但是这猴子有一个习惯:每一次只能跳1步或跳3步,试问猴子通过这个阶梯有多少种不同的跳跃方式?
输入描述

输入只有一个整数N(0<N<=50)此阶梯有多少个台阶。

输出描述

输出有多少种跳跃方式(解决方案数)。

输入

3

输出

2

输入

50

输出

122106097

分析:

上山最后一步到达第50级台阶,完成上山,共有f(50)种不同的爬法,

到第50级之前位于哪一级呢?无非是位于第49级(上跳1级即到),有f(49)种;

或位于第48级(上跳3级即到),有f(48)种,于是:

f(50)=f(49)+f(47)

f(49)= f(48)+f(46)

f(48)= f(47)+f(45)

依次类推

以此类推,一般地有递推关系:

f(n)=f(n-1)+f(n-3) (n>3)

初始条件:

f(1)=1,即1=1;

f(2)=1,即2=1+1(注意:跳法中不允许直接跳2级);

f(3)=2,即3=1+1+1,3=3;

故此递推设计比较简单,时间复杂度为O(n)

编码:

复制代码
public class TestDump {
    public static void main(String[] args) {
        Scanner scanner=new Scanner(System.in);
        System.out.print("请输入阶梯数:");
        int num=scanner.nextInt();
        System.out.println(showF(num));
    }

    /**
     * 递归算法f(n) = f(n-1) + f(n-3);
     * f(1) =1;f(2) =1;f(3) = 2
     */
    public static long showF(int n) {
        if (n == 1 || n == 2) {
            return 1;
        }
        if (n == 3) {
            return 2;
        }
        return showF(n - 1) + showF(n - 3);
    }
}

效果:

相关推荐
roman_日积跬步-终至千里3 分钟前
【计算机算法与设计(14)】例题五:最小生成树:Prim算法详细解释:π的含义、更新逻辑和选点原因
算法
让学习成为一种生活方式3 分钟前
压缩文件夹下下所有文件成压缩包tar.gz--随笔016
算法
AI科技摆渡5 分钟前
GPT-5.2介绍+ 三步对接教程
android·java·gpt
嗷嗷哦润橘_9 分钟前
AI Agent学习:MetaGPT项目之RAG
人工智能·python·学习·算法·deepseek
猿与禅12 分钟前
Spring Boot 4.0 完整核心特性及实践指南
java·spring boot·后端·spring·重大升级·springboot4.0
运维@小兵26 分钟前
Spring-AI系列——Tool Calling获取当前时间
java·后端·spring
不忘不弃27 分钟前
指针元素的使用
算法
认真敲代码的小火龙29 分钟前
【JAVA项目】基于JAVA的养老院管理系统
java·开发语言·课程设计
he___H29 分钟前
滑动窗口一题
java·数据结构·算法·滑动窗口
AI科技星30 分钟前
统一场论质量定义方程:数学验证与应用分析
开发语言·数据结构·经验分享·线性代数·算法