第一次返回有效,第二次无效



我正在做以下练习:

通过将数字的数字组成一个新数字,直到它被看到为止之前例如:

44→32→13→10→1.→1

85→89→145→42→20→4.→16→37→58→89

因此,任何到达1或89的链条都将卡在无尽的循环。

最令人惊奇的是,每一个起始数字最终都会在1点或89点到达。

有多少低于1000万的起始数字将达到89?

我刚才的代码是:

def start () :
start_range = range(4)
res = map(getDigits, start_range)
print(list(res))
def getDigits (num) :
check = checkNum(num)
if check is False :
strNum  = str(num)
numList = map(toInt, strNum)
squareList = map(getSquareOfDigits, numList)
sumOfSquares = sum(squareList)
getDigits(sumOfSquares)
else :
return check
def checkNum(num) :
if num == 0 or num == 1 :
print(type(num))
print(num)
return 0
elif num == 89 :
print(type(num))
print(num)
return 1
else :
return False
def toInt (char) :
return int(char)
def getSquareOfDigits (num) :
return num * num
start()

输出为

<class 'int'>
0
<class 'int'>
1
<class 'int'>
89
<class 'int'>
89
[0, 0, None, None]

我不明白为什么,如果它正确地通过elif,它就不会返回"1"并正确地将其添加到列表中。

在递归函数中,递归调用中必须有返回值

def getDigits (num) :
check = checkNum(num)
if check is False :
strNum  = str(num)
numList = map(toInt, strNum)
squareList = map(getSquareOfDigits, numList)
sumOfSquares = sum(squareList)
---------> return getDigits(sumOfSquares)
else :
return check

最新更新