python - 递归求和函数(“UnboundLocalError:赋值前引用的局部变量”)
问题描述
简单的递归求和函数。
它应该添加一个数字的所有数字。例如 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
我的问题是为什么代码不起作用?
解决方案
在引用它之前,您必须向变量添加一个值。所以在声明first_digit
之前定义。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))
推荐阅读
- mysql - 明智地显示数据组
- node.js - 处理批量记录时 MongoDB 查询中断
- html - 中心视频缩放
- javascript - 从 Express API 返回的带有引号的 JSON 对象——为什么?以及如何解决?
- c# - ListView DTO 中的 DropDownList DataSourceID
- angular - 角度 4:嵌套表单字段:找不到带有路径的控件
- string - Julia - 由显示方程触发的无效转义序列
- android - Android 杀死生命周期示例
- intellij-idea - Intellij-IDEA 选择了错误的 maven 依赖
- spring - 在spring批处理中处理json文件