第一次返回有效,第二次不起作用

时间:2018-11-16 09:15:54

标签: python python-3.x

我正在做以下练习:

  

通过连续添加平方来创建数字链   一个数字组成一个新的数字,直到被看到为止   之前。例如:

     

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'并将其正确添加到列表中。

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