【问题标题】:Recursive sum function (" UnboundLocalError: local variable referenced before assignment")递归求和函数(“UnboundLocalError:赋值前引用的局部变量”)
【发布时间】:2020-12-30 05:09:10
【问题描述】:

简单的递归求和函数。

它应该添加一个数字的所有数字。例如 sum(123) = 1 + 2 + 3 = 7

它通过尾递归工作。我取给定数字的第一个数字并将其添加到其余数字的总和中。

def sum(num):
    num_of_digits = len(str(num))
    if num_of_digits != 1:
        first_digit = int(num / pow(10, num_of_digits - 1))
        rest = num - int(num / pow(10, num_of_digits - 1)) * pow(10, num_of_digits - 1)
        return first_digit + sum(rest)
    else:
        return first_digit

print(sum(123))

错误

UnboundLocalError: local variable 'first_digit' referenced before assignment

我的问题是为什么代码不起作用?

【问题讨论】:

  • 在引用它之前,您必须向变量添加一个值。所以在 if 语句之前定义first_digit
  • first_digitnum 为单个数字时未分配

标签: python python-3.x recursion


【解决方案1】:

在引用变量之前,您必须为其添加一个值。所以在if 语句之前定义first_digit

你可以这样做:

def sum(num):
    num_of_digits = len(str(num))

    # defining first_digit before if...
    first_digit = 0

    if num_of_digits != 1:
        # then referencing it will work
        first_digit = int(num / pow(10, num_of_digits - 1))

        rest = num - int(num / pow(10, num_of_digits - 1)) * pow(10, num_of_digits - 1)
        return first_digit + sum(rest)
    else:
        return first_digit

print(sum(123))

【讨论】:

    猜你喜欢
    • 2012-11-14
    • 2013-11-29
    • 2019-09-02
    • 1970-01-01
    • 2022-12-25
    • 2015-06-14
    • 2018-06-29
    • 2011-10-31
    • 2020-05-05
    相关资源
    最近更新 更多