python - 返回递归函数 - Python
问题描述
目前我正在解决 CodeWars 上的问题,并且我被困在Persistent Bugger问题上。
编写一个函数,persistence,它接受一个正参数 num 并返回它的乘法持久性,这是您必须将 num 中的数字相乘直到达到单个数字的次数。
例如:
persistence(39) # 返回 3,因为 3 9=27, 2 7=14, 1 4=4 # 而 4 只有一位数字 persistence(999) # 返回 4,因为 9 9 9=729, 7 2 9=126 , # 1 2 6=12, 最后是 1 2=2
persistence(4) # 返回 0,因为 4 已经是一位数
我已经将我的问题缩小到一个递归函数,但是我在思考如何返回我的迭代计数器时遇到了麻烦。
目前它通过程序运行并保持准确的计数。但是,当它以单个数字值结束时,它会返回到持久性调用,每次都降低我的迭代。
def persistence(n, iter=0):
chars = str(n)
if n > 9:
result = 1
for y in chars:
result = result * int(y)
iter += 1
persistence(result, iter)
else:
return iter
解决方案
我已经阅读了您的问题,发现您面临的问题很有趣,您的代码大部分是正确的,即if
没有递归调用的部分。
我已经调整了您的代码,以便它只需要一个参数使用 while 循环,并使用math.prod()
方法,这样您就不必使用循环来获取列表的产品。
while
循环基本上是if
,除了它在执行后再次检查执行结果的条件,如果结果条件仍然为真,则循环执行,直到条件为假。
要使while
循环递归,您只需将结果分配给输入:
chars = str(result)
所以这里是代码:
import math
def persistence(n):
if n < 10: return 0
else:
chars = str(n)
i = 0
result = math.prod([int(y) for y in chars])
while result > 10:
i += 1
result = math.prod([int(y) for y in chars])
chars = str(result)
return i
推荐阅读
- c++ - 如何测试输入是否为数字
- r - 删除绘图中的文本
- x509 - 如何通过命令行将 CSR 回复导入我的密钥对?
- oauth-2.0 - WebSphere 上托管的 REST API 的第三方 OAuth
- html - 如何在表格的 td 中添加其他相同高度的行
- python - clickhouse_driver.errors.UnexpectedPacketFromServerError:代码:102。来自服务器的意外数据包无:无
- typescript - 未捕获的类型错误:无法设置未定义的属性“索引”
- go - 处理变量的作用域:inside loop
- gradle - 尝试将我的 gradle 应用程序部署到 heroku 时收到错误无法找到方法 testImplementation()
- r - 如何计算具有唯一性的字符串并将它们输入到 R 的另一列中