题解 | #放苹果#
放苹果
http://www.nowcoder.com/practice/bfd8234bb5e84be0b493656e390bdebf
把大问题分解为两个子问题通过递归实现 程序的出口需要考虑n和m的不同情况:大于小于和等于 大于:全满是不可能的,一个程序出口 等于:m==0 n==1出口 小于:n==1 m==1 m==0出口(小于可能被递减成等于)只有一个水果时不管剩几个盘子都只有一种方法,只有一个盘子时不管几个水果也只有一种方法
while True:
try:
m, n = map(int, input().split())
def backtrack(m,n):
if n==1 or m==1 or m==0:#
return 1
elif m<0:
return 0
else:
return backtrack(m,n-1)+backtrack(m-n,n) #存在空和不存在空,如果n>m,肯定属于不存在空
print(backtrack(m,n))
except:
break