编写一个持久性函数,它接受正参数
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
如果您想保持算法相同,可以使用默认参数:
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))