【问题标题】:Can the input function be used to pass an argument to a recursive function?输入函数可以用于将参数传递给递归函数吗?
【发布时间】:2022-01-25 08:46:32
【问题描述】:

第一次在这里发帖。 Python 新手,尝试更好地理解递归和输入函数。在这段代码中,我试图获取用户输入 (x) 并将其传递给递归函数。我认为它会打印一个 (x) 数字列表,其中每个连续数字的差异减少 1。无论它做什么,我都会从中学习,但我真的只想知道我需要什么更改以获取用户输入并将其传递给此递归函数。代码受此示例启发:

https://www.w3schools.com/python/trypython.asp?filename=demo_recursion

谢谢。

x = int(input("Choose a number "))

def add_last(x):
  result = x + (add_last(x- 1))
  print(result)

add_last(x)

【问题讨论】:

  • 那么你想知道这段代码是做什么的吗?
  • 你尝试的时候到底是什么问题?
  • 嗨。不,只是如何让它运行并打印一个 x 数字列表(由用户输入定义),这些数字打印由递归语句定义的序列。
  • 我收到此错误消息:RecursionError: 超出最大递归深度

标签: python recursion user-input


【解决方案1】:

递归函数必须始终有一个“结束”情况,即何时结束递归?

所以在add_last 中,可能会添加如下内容:

if x==0:
   return 0

如果没有结束案例,您可能会遇到RecursionError: maximum recursion depth exceeded

我认为它会打印一个 (x) 数字的列表,其中每个连续数字的差值减 1。

嗯,不。在您的函数中,您只是将整数相加,更具体地说,将所有先前整数的总和添加到当前整数。所以你的函数的返回值只是另一个整数,特别是sigmax

编辑:

由于您没有返回任何内容,因此该函数默认返回None。因此错误:TypeError: unsupported operand type(s) for +: 'int' and 'NoneType' for the function definition

您需要返回一个整数才能使其工作。

编辑 2:

如果您正在处理大量数字,并且可能需要重复多次,正如@CoderTang 建议的那样,您可以使用sys.setrecursionlimit(you_new_limit) 来设置自己的递归限制。

【讨论】:

  • 如果数字大于 1000,你可以使用 sys.setrecursionlimit
  • 哦,是的。忘记了基本情况。进行了编辑。现在它给出了一个 TypeError: unsupported operand type(s) for +: 'int' 和 'NoneType' 用于函数定义。最后一行的类型错误。
  • @Sean-Lee add_last 函数不返回任何内容。
  • @CoderTang 我已经编辑了这篇文章并链接了启发这个实验的代码示例。那个有效。
  • @Sean-Lee 尝试将其可视化pythontutor.com/…
【解决方案2】:

由于您只是打印,因此您无需返回任何东西。

def add_last(x):
    if x == 0:
        return
    print(x)
    add_last(x-1)

print("\n\nRecursion Example Results")
add_last(6)

【讨论】:

  • 好的,知道这很有用。谢谢。但是现在我怎样才能将用户输入作为函数参数呢?
  • 只需使用用户输入@Sean-Lee 调用该函数。 add_last(int(input(“Enter number: “)))
  • @AV_69 好的,谢谢。马上试试!
  • @AV_69 很高兴它会起作用,但该行返回了 SyntaxError: invalid character in identifier。
  • 我不好,所以将引号更改为时尚的。但你明白了,只需事先获取用户输入并将其传递给函数。
猜你喜欢
  • 2014-02-07
  • 1970-01-01
  • 2020-05-06
  • 1970-01-01
  • 2022-06-10
  • 1970-01-01
  • 2014-06-27
  • 2013-01-27
相关资源
最近更新 更多