用python做猴子摘桃的题目,java猴子爬台阶算法

本文介绍了猴子爬山问题的Java代码实现,首先通过递归方式,但遇到递归深度过深的问题。然后优化为循环全排列的方法,计算不同跳法的数量,适用于N<50的情况。

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

大家好,给大家分享一下猴子爬山算法java完整代码,很多人还不知道这一点。下面详细解释一下。现在让我们来看看!

Source code download: 本文相关源码

猴子爬山一只顽猴在一座有N级台阶的小山上爬山跳跃。上山时需从山脚至山顶往上跳N级台阶,一步可跳1级,或跳3级,求上山有多少种不同的跳法? (N<50)

问题分析:

每一次都可以选择1,2,3有3种跳法

方法1 直接使用递归

jumpWay = [1, 3]

footstep = int(input())

jumping = 0

#first write

def jump(nowstep, footstep, jumpWay):
    if nowstep == footstep:
        global jumping
        jumping += 1
        return
    elif nowstep > footstep:
        return
    else:
        for i in range(len(jumpWay)):
            jump(nowstep + jumpWay[i], footstep, jumpWay)


jump(0, footstep, jumpWay)

但是这种方式会提示 递归层数过多

想办法对算法进行合理优化,排列组合

方法2 循环全排列

size = int(input())
n3 = size//3
res = 0

# 求阶乘
def jiecheng(n):
    num = 1
    if n==1:
        return 1
    else:
        for i in range(1,n+1):
            num*=i
        return num
        
# 求排列        
def c43(n4,n3):
    # return jiecheng
    # 3!/(4-3)!*3!
    # j3 = jiecheng(3)
    return jiecheng(n4)//(jiecheng(n4-n3)*jiecheng(n3))

# a32不用了
# def a32(n3,n2):
#    return jiecheng(n2)//jiecheng(n3)-jiecheng(n2)

# 循环
for i in range(size+1):
    # i 为有几个 1步的情况
    for j in range(n3+1):
        # j为有 几个 3步的情况
        if (i+j*3) == size:
            # temp 为总数
            temp = j+i
            res+=c43(temp,j)
print(res)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值