def mot (n) :
if n==0 :
yield n
else :
for m in mot(n-1) :
yield [m]
for k in range(0,n-1) :
for l in mot(k) :
for r in mot(n-2-k) :
yield (l,r)
def countFor(f,n) :
for i in range(n) :
count = 0
for t in f(i) :
count+=1
yield count
def countsFor(mes,f,n) :
print(mes)
print([c for c in countFor(f,n)])
print("")
def showFor(mes,f,n) :
print(mes)
for t in f(n) :
print(t)
print("")
showFor('Motzkin trees',mot,4)
countsFor('Motzkin trees',mot,12)
print("done")
def test() :
for n in range(6) :
print(n,list(mot(n)))
我有以下输出motzkin数的代码,我想把yield表达式改成另一个更简单的表达式或函数,我该怎么做,我该怎么做? 谢谢
从生成有限序列的生成器函数中去掉
yield
就像将生成的值附加到列表中以返回一样简单。你知道吗例如,您的
mot
函数可以在没有yield
的情况下修改为:但是,除非调用者需要对返回的列表执行基于索引的操作,否则不需要转换函数以返回列表,因为生成器速度更快,内存效率更高。你知道吗
作为一个动态规划:
根据维基百科,莫普兹金数满足这个循环关系:
这很容易翻译成代码:
现在我们可以循环遍历序列中的项,直到数字变得太大而无法存储,或者从列表的前面切几个:
相关问题 更多 >
编程相关推荐