python中的快乐数字问题。如何避免无限循环?

问题描述 投票:-2回答:1

此代码仅适用于快乐数字。当输入一个悲伤的数字时,我收到一个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))
python
1个回答
0
投票

快乐数字最终将收敛于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
© www.soinside.com 2019 - 2024. All rights reserved.