我正在创建一个程序来计算数字列表中最高的小数位数.基本上,一个列表[123, 1233]将返回4,因为1233中有四个数字,它是最大的.另一个例子是[12, 4333, 5, 555555]返回6因为555555有6个数字.
这是我的代码.
def place(listy):
if len(listy) == 1:
decimal = len(str(listy[0]))
print(decimal)
else:
if len(str(listy[0])) >= len(str(listy[1])):
new_list = listy[0:1]
for i in listy[2:]:
new_list.append(i)
place(new_list)
else:
place(listy[1:])
Run Code Online (Sandbox Code Playgroud)
现在,当我使用print(decimal)它的工作原理,但如果我更改print(decimal)到return decimal,它不返回任何东西.为什么是这样?我该如何解决?我遇到过这些返回语句,它们运行了很多次.提前致谢!
当你做一个递归调用(即当发生调用的地方,被叫的地方返回一个值,然后调用的地方必须返回它,以及(即返回值"冒泡"初始调用者).
所以你需要替换每个递归调用
place(...)
Run Code Online (Sandbox Code Playgroud)
同
return place(...)
Run Code Online (Sandbox Code Playgroud)
正如其他人所说,有更简单的解决方案,例如使用max().如果你想保持递归方法,我会重构你的代码如下:
def place2(listy):
if len(listy) < 1:
return None
elif len(listy) == 1:
return len(str(listy[0]))
else:
v0, v1 = listy[0], listy[1]
if v1 > v0:
return place2(listy[1:])
else:
return place2([listy[0]]+listy[2:])
Run Code Online (Sandbox Code Playgroud)
尽管这是尾递归的,但Python并不关心,因此这种方法效率低下.使用max()或使用循环将是Python中更好的解决方案.
| 归档时间: |
|
| 查看次数: |
4218 次 |
| 最近记录: |