【问题标题】:Recursive function in Python giving unexpected outputPython 中的递归函数给出意外输出
【发布时间】:2023-01-25 00:39:59
【问题描述】:

我正在尝试编写一个递归函数,其目的是找到数字列表中不存在的最小正整数。

当数字按顺序排列时,该函数工作正常,但如果它们不按顺序排列,则会产生意想不到的结果。例如,输入 [1, 2, 3] 将返回 4,这是好的,但 [1, 3, 2] 将返回 3,这是意外的。

A = [1, 2, 3]
def solution(A):
    smallestpositiveinteger = recursivesearch(A)
    return smallestpositiveinteger

def recursivesearch(A, integer = 1):
    for number in A:
        if (number == integer) :
            integer += 1
            recursivesearch(A, integer)
    return integer
varSolution = solution(A)
print(varSolution)

【问题讨论】:

  • 如果您只是要忽略它的返回值,那么递归调用该函数有什么意义呢?
  • 这不适合 Python 中的递归。如果列表足够长,您将溢出堆栈。使用常规的 while 循环。
  • 更糟糕的是,如果 A 有一个“洞”,它也会失败:A = [1, 2, 4] 也会产生 3。
  • 对 Laerne - 此函数的目的是找到数字集中不存在的最小整数。因此,输入 [1, 2, 4] 时产生 3 正是我要找的。我不确定 jasonharper 说我忽略了返回值是什么意思
  • 他的意思是 recursivesearch(A, integer) 应该是 return recursivesearch(A, integer)

标签: python


【解决方案1】:

您使用的是==,这样会始终检查它们是否有序。相反,您应该使用>=。这是因为您只是想检查一个数字是否更大比当前最大值

def recursivesearch(A, integer = 1):
    for number in A:
        if (number >= integer) :
            integer += 1
            recursivesearch(A, integer)
    return integer

【讨论】:

    【解决方案2】:

    if 语句中使用 >= 而不是 ==

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-09-08
      • 1970-01-01
      • 1970-01-01
      • 2020-06-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多