打印给定长度的子序列“ k”来自阵列

发布于 2025-01-20 20:45:23 字数 434 浏览 1 评论 0 原文

为此代码获取运行时错误: -

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)

但是为什么它显示此代码的运行时间错误?

Getting Runtime error for this code :-

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)

But why it is showing run Time error for this ?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

智商已欠费 2025-01-27 20:45:23

递归是一种功能遗产,因此使用功能样式将其带来最佳结果。这意味着避免诸如突变,可变的重新分配和其他副作用之类的事情。

我们可以使用 selectk

  1. 大小 k 为零,产生空组合
  2. (归纳) k 大于零。如果Itable it 是空的,请停止迭代
  3. (归纳) k 大于零,并且iTable it 至少具有一个元素。对于每个 comb sub -Problem selectk(it [1:],k -1),将 it 的第一个元素预先置于结果 comb 产生子问题的每个结果 selectk(it [1:],k)
def choosek(it, k):
  if k == 0:
    yield ()                               #1
  elif not it:
    return                                 #2
  else:
    for comb in choosek(it[1:], k - 1):    #3
      yield (it[0], *comb)
    yield from choosek(it[1:], k)

注意 print 侧面效应已移动到功能之外,以便呼叫者可以按照结果组合做任何选择 -

for comb in choosek("

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 -

  1. if size k is zero, yield the empty combination
  2. (inductive) k is greater than zero. if the iterable it is empty, stop iteration
  3. (inductive) k is greater than zero and the iterable it has at least one element. for each comb of the sub-problem choosek(it[1:], k - 1), prepend the first element of it to the resulting comb and yield each result of the sub-problem choosek(it[1:], k)
def choosek(it, k):
  if k == 0:
    yield ()                               #1
  elif not it:
    return                                 #2
  else:
    for comb in choosek(it[1:], k - 1):    #3
      yield (it[0], *comb)
    yield from choosek(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 -

for comb in choosek("????????????????", 2):
  print("".join(comb))
????????
????????
????????
????????
????????
????????
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文