我正在做以下练习:
通过连续添加平方来创建数字链 一个数字组成一个新的数字,直到被看到为止 之前。例如:
44→32→13→10→1→1
85→89→145→42→20→4→16→37→58→89
因此,到达1或89的任何链条都将卡在 无休止的循环。
最令人惊讶的是,每个起始号码最终都会 到达1或89。
有多少个低于一千万的起始数字将达到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'并将其正确添加到列表中。
答案 0 :(得分: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