如何在Python中不传递计数参数来计算递归深度?

问题描述 投票:0回答:1

编写一个持久性函数,它接受正参数

n
并返回其乘法持久性,即必须将
n
中的数字相乘直到达到一位数的次数。

例如:

我已经尝试过这段代码,它可以工作,但游戏规则是我不能传递 2 个参数。所以我必须消除

counter
论点。

def persistence(n,counter): #recursion

    n = list(str(n))
    product = 1

    for i in n:
        product *= int(i)

    if product < 10:
        return counter+1

    else:
        counter +=1
        return persistence(product,counter)
persistence(39) # returns 3, because 3*9=27, 2*7=14, 1*4=4
                 # and 4 has only one digit
python recursion
1个回答
0
投票

如果您想保持算法相同,可以使用默认参数:

def persistence(n, counter=0):
    product = 1

    for i in str(n):
        product *= int(i)

    if product < 10:
        return counter + 1

    return persistence(product, counter + 1)

print(persistence(39))

话虽如此,正如 @TomKarzes 指出的那样,根本不需要

counter
参数(或就此而言的递归)——将结果传递回调用堆栈而不是向下。除了
n
本身的当前状态之外,任何给定的调用都不需要来自先前调用的任何信息来确定持久性。

def persistence(n):
    product = 1

    for i in str(n):
        product *= int(i)

    if product < 10:
        return 1

    return persistence(product) + 1

print(persistence(39))
© www.soinside.com 2019 - 2024. All rights reserved.