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

什么';我的包含递归函数的Python代码有什么问题?,python,recursion,Python,Recursion,我正在使用递归查找一个 以下是我的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

我正在使用递归查找一个

以下是我的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”。当我运行最后两个raws代码时,第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)

问题在于您只定义了一次
deepth
。然后,重复使用它以前的值。要解决这个问题,当返回False或True时,必须将
deepth
设置为0。

正如巴拉克·马诺斯在回答中指出的那样,
deepth
变量是罪魁祸首。在达到深度800的情况下,不会重置。如果这样做,您的代码将正常工作:

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:
            deepth = 0
            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)

我完全同意威尔的观点,你不应该使用全局变量。

一个胡乱猜测:
global deepth
变量与此有关(顺便说一句,应该拼写为“deepth”)。非常感谢。我应该向你学习。我用你的提醒解决了,没问题。很高兴能帮忙。