我正在观看Reducible关于递归的视频,并看到了这段代码,我不明白它是如何工作的,有人可以解释一下吗?


# function counts number of ways you can
# partition n objects 
# using parts up to m (assume m>=0)
n=int(input('enter n '))
m=int(input('enter m '))
def count(n, m):
if n==0:
return 1
elif m==0 or n<0:
return 0
else:
return count(n-m , m)+count(n , m-1)
print(count(n,m))

我不了解每个函数的输入和输出,我想学习这一点,我很沮丧。我希望有人能帮助我。我特别不明白它是如何从这个函数返回一个值,而不是两个值的。(这是我的第一篇文章,我不知道它的格式是否正确(。

我不了解每个函数的输入和输出

输入是对象n的总数,以及可以拆分为m的分区的最大大小。

输出是符合该条件的可能分区数的计数。

例如,如果n == 3m == 2,则可能的分区是3个分区,每个分区有1个项目,或者2个分区,分别有2个和1个项目。所以输出是2。

我特别不明白它如何从这个函数返回一个值,而不是两个

基本情况显然每个都只返回一个值。其中之一返回1,另一个返回0

如果它没有从一个基本情况中立即返回,它会递归地调用自己两次,其中一个参数的值较小。因此,每个递归调用都更接近一个基本情况。当这些返回时,它会将结果相加在一起,所以它只返回一个值,而不是两个值。

最新更新