此代码仅适用于快乐数字。当输入一个悲伤的数字时,我收到一个RecursionError,因为该函数将无限循环,因为永远不会满足基本条件。 (程序应为快乐数字返回1。为悲伤数字返回0)。我在处理如何合并悲伤数字返回0时遇到麻烦。
快乐数字是如果将每个数字平方并加在一起的数字,在某些时候,它将给您1.例如:7-> 49-> 97-> 130-> 10-> 1。悲伤的数字是所有不快乐的数字-2,3,4 ..
def main():
usernum= input("enter a number: ")
happynum(usernum)
def happynum(num):
result=0
if num == '1':
return 1
else:
for dig in num:
result += int(dig) * int(dig)
happynum(str(result))
快乐数字最终将收敛于1,您的基本情况将抓住它。但是,不开心的数字会进入一个永无止境的周期性序列。结果,您的递归将永远不会结束。一种解决方案是保留您到目前为止所看到的数字的列表。如果您看到重复的话,您就会知道自己处于循环中,因此从一个不满意的数字开始。
def happynum(num, seen=set()):
result=0
if num == '1':
print("happy")
return 1
else:
for dig in num:
result += int(dig) * int(dig)
if(result in seen): # been here before
print("sad")
return
seen.add(result)
return happynum(str(result), seen)
happynum('97') #prints happy
happynum('98') # prints sad