题解 | 递归#放苹果#

放苹果

http://www.nowcoder.com/practice/bfd8234bb5e84be0b493656e390bdebf

递归思路:

  • 需要返回的结果: f(m,n)(方法数量)
  • 按照n,m 分为两种情况:
    • n>m:需要去掉n-m个盘子,故:f(m,n)=f(m,m)
    • n<=m: 考虑两种互斥事件(形成m,n可以每次递归递减的情况):
      • 每个盘子至少放一个: f(m,n) = f(m-n,n)
      • 至少有一个盘子是空的: f(m,n) = f(m,n-1)
  • 退出递归的条件(题目条件** 0<=m<=10, 1<=n<=10**):
    • m 一直递减,直至苹果 m=0: 说明盘子已经全部完成放置,f(m,n)=1 (m=0可理解为0个苹果放到n个盘子里,只有一种方法,边界条件)
    • n 一直递减,直至苹果 n=1: 剩余苹果全部放在这个盘子里, f(m,n)=1
def f(m,n):
    if m ==0 or n==1:
        return 1
    elif n > m:
        return f(m,m)
    else:
        return f(m-n,n)+f(m,n-1)
while True:
    try:
        m,n = list(map(int,input().split()))
    except:
        break
    else:
        print(f(m,n))
全部评论

相关推荐

06-27 12:30
延安大学 C++
实习+外包,这两个公司底层融为一体了,如何评价呢?
一表renzha:之前面了一家外包的大模型,基本上都能答出来,那面试官感觉还没我懂,然后把我挂了,我都还没嫌弃他是外包,他把我挂了……
第一份工作能做外包吗?
点赞 评论 收藏
分享
牛客83700679...:简历抄别人的,然后再投,有反馈就是简历不行,没反馈就是学历不行,多投多改只要技术不差机会总会有的
点赞 评论 收藏
分享
评论
5
1
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务