Tôi đang sử dụng đệ quy để tìm một số happy number.Có gì sai với mã Python của tôi có chứa hàm đệ quy?
Sau đây là mã Python tôi:
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)
Kết quả là:
7 True
1 True
2 False
3 False
4 False
5 False
6 False
7 False
8 False
9 False
10 True
Khi tôi kiểm tra số 7 một mình, nó sẽ trả về 'True'. Trong khi tôi chạy hai mã thô cuối cùng, số 7 trả về 'False'.
Tôi không biết phần nào là sai.
Sau một vài phút, tôi tìm thấy phần sai trong mã Python của mình. Và tôi thêm:
deepth = 0
sau:
if deepth > 800:
Với sự nhắc nhở của @ Will, tôi tìm thấy một giải pháp cho vấn đề này. Mã sửa đổi là như sau:
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,
Đoán ngẫu nhiên: biến 'toàn cầu 'có liên quan đến nó (BTW, nó phải được viết là" độ sâu "). –