打印给定长度的子序列“ k”来自阵列
为此代码获取运行时错误: -
import numpy as np
def combination(inp,n,k,ans):
if len(ans)==k:
print(*ans)
else:
if len(inp)>0:
b=[]
b=ans.append(inp[0])
combination(inp[1:],n,k,b)
combination(inp[1:],n,k,ans)
n=int(input())
a=list(map(int,input().split()))
a=np.array(a)
k=int(input())
ans=[]
combination(a,n,k,ans)
但是为什么它显示此代码的运行时间错误?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
递归是一种功能遗产,因此使用功能样式将其带来最佳结果。这意味着避免诸如突变,可变的重新分配和其他副作用之类的事情。
我们可以使用 selectk
k
为零,产生空组合k
大于零。如果Itableit
是空的,请停止迭代k
大于零,并且iTableit
至少具有一个元素。对于每个comb
sub -Problemselectk(it [1:],k -1)
,将it
的第一个元素预先置于结果comb
和产生子问题的每个结果selectk(it [1:],k)
注意
print 侧面效应已移动到功能之外,以便呼叫者可以按照结果组合做任何选择 -
Recursion is a functional heritage and so using it with functional style yields the best results. This means avoiding things like mutations, variable reassignments, and other side effects.
We can write fixed-length combinations
choosek
using inductive reasoning -k
is zero, yield the empty combinationk
is greater than zero. if the iterableit
is empty, stop iterationk
is greater than zero and the iterableit
has at least one element. for eachcomb
of the sub-problemchoosek(it[1:], k - 1)
, prepend the first element ofit
to the resultingcomb
and yield each result of the sub-problemchoosek(it[1:], k)
Notice the
print
side effect is moved outside of the function so the caller can do whatever they choose with the resulting combinations -