Python 递归求和函数(“UnboundLocalError:赋值前引用的局部变量”)

Python 递归求和函数(“UnboundLocalError:赋值前引用的局部变量”),python,python-3.x,recursion,Python,Python 3.x,Recursion,简单的递归求和函数 它应该将一个数字的所有数字相加。例如,和(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(

简单的递归求和函数

它应该将一个数字的所有数字相加。例如,和(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
语句之前定义
第一位数字

您可以这样做:

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))

在引用变量之前,必须先向其添加值。因此,在if语句之前定义
first_digit
first_digit
为单个数字时,不分配
first_digit