题解 | #放苹果# 高中生看得懂:盘子个数/n元 1次方程的非负整数解的个数, 递归 python

放苹果

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

求fun(app, d):
(按题意:app>=0,d>=1,但代码中有app-d,不能保证输入的app>0, 而题目确保d>=1,递归出口有d=1, 且所以d不会再小)

拆分成2种情况(不重不漏):
1.某些盘子没有app。具体哪些盘子空着?不管。只要1个盘子没有app,则满足这点。其他的盘子的情况?问老爸(下一轮迭代)
2.所有盘子都有app。往每个盘子仍1个app。则满足了这点。各盘子有多少app?问老爸(下一轮迭代)
return fun(app,d-1)+fun(app-d,d)

递归出口:
1.app <0:d个非负整数 求和为负数 的一次方程,无解。return 0
2.app==0,错误理解:“没苹果了,没法分,解决方法数为0”。

if app==0:
    return 0

但其实,a1+a2+...+an = 0这个方程有1个解。全0解。retunr 1才对。

  1. app>0, d==1: return 1
    理解方法:方程a1 = app, 解只有一个,就是a1 = app。

python:


def fun(app, d):
    if app <0:
        return 0
    else:
        #这行改成 if app==0也行,但要多跑几遍fun(app,d-1)直到 d=1
        if  app==1 or app==0:
            return 1
        else:
            if d==1 :
                return 1
            else:
                return fun(app,d-1)+fun(app-d,d)

while 1:
    try:
        l=input().split(' ')
        app,d=tuple(map(int,l))
        print(fun(app,d))
    except:
        break
全部评论

相关推荐

无敌虾孝子:喜欢爸爸还是喜欢妈妈
点赞 评论 收藏
分享
10-17 12:16
同济大学 Java
7182oat:快快放弃了然后发给我,然后让我也泡他七天最后再拒掉,狠狠羞辱他一把😋
点赞 评论 收藏
分享
5 1 评论
分享
牛客网
牛客企业服务