python - 我的包含递归函数的 Python 代码有什么问题?

标签 python recursion

我正在使用递归查找 happy number .

以下是我的Python代码:

deepth = 0
def is_happy_number(number):
    astring = str(number)
    global deepth
    digits = [int(char) for char in astring]
    sum_digit = sum([digit**2 for digit in digits])
    if sum_digit == 1:
        deepth = 0
        return True
    else:
        deepth += 1
        if deepth >800:
            return False
    return is_happy_number(sum_digit)

print '7',is_happy_number(7)
for number in range(1,11):
    print number,is_happy_number(number)

结果是:

7 True
1 True
2 False
3 False
4 False
5 False
6 False
7 False
8 False
9 False
10 True

当我单独测试数字 7 时,它返回“True”。当我运行最后两个原始代码时,数字 7 返回 'False'。

我不知道哪一部分是错的。

几分钟后,我在我的 Python 代码中找到了错误的部分。 我补充说:

deepth = 0

之后:

if deepth > 800:

在@Will的提醒下,我找到了解决这个问题的另一种方法。 修改后的代码如下:

def is_happy_number(number, deepth=0):
    astring = str(number)
    digits = [int(char) for char in astring]
    sum_digit = sum([digit**2 for digit in digits])
    if sum_digit == 1:
        return True
    else:
    deepth += 1
    if deepth >800:
        return False
    return is_happy_number(sum_digit,deepth)

print '7',is_happy_number(7,0)
for number in range(1,10):
    if is_happy_number(number,0):
        print number,

最佳答案

您未能重置全局变量 depth。处理此问题的更好方法是将深度传递给递归调用。

像这样:

def is_happy_number(number, depth=0):
    # ... as before ...
    return is_happy_number(sum_digit, depth)

关于python - 我的包含递归函数的 Python 代码有什么问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29943875/

相关文章:

python - sklearn.preprocessing 中的自定义装箱?

python - python-markdown 在不受信任的输入上安全吗?

algorithm - 查找特定位置不变的字符串的所有排列

python - 使用现有实例初始化 super?

python - 谷歌应用引擎 : How to choose regular expression for app. yaml

python - 子类没有正确地从父类(super class)继承结构

recursion - 证明相互递归类函数的减少子句

arrays - Rust:递归函数变异向量的指导

sql - 将递归函数转换为 View

Python 解码 JSON 中的嵌套 JSON