python - Python - 尽管返回值是列表,但递归函数不适用于 len()
问题描述
所以我想创建一个递归函数,在使用它或失去它的意义上起作用,它通过列表使用无限数量的硬币,并计算所需的数量。
假设你有:change(48, [1, 5, 10, 25, 50]) 它会返回 6,因为它将使用 25x1、10x2 和 1x3,总共 6 个硬币。
def change(value, L):
if not L:
return L
if L[-1] > value:
return change(value, L[:-1])
else:
useIt = [L[-1]] + change(value - L[-1], L)
return useIt
这将返回使用的硬币列表,但是如果我返回 len(useIt),则会收到以下错误:
TypeError:只能将列表(不是“int”)连接到列表
但是,这将返回正确的值:
print(len(change(48, [1, 5, 10, 25, 50])))
如何在不这样做的情况下返回列表的长度?请不要循环,只有递归,这是考试复习。
解决方案
您已经完成了出色的工作,只需放置1
在else部分并在基本情况下返回[L[-1]]
0即可。
def change(value, L):
if not L:
return 0
if L[-1] > value:
return change(value, L[:-1])
else:
useIt = 1 + change(value - L[-1], L)
return useIt
print(change(48, [1, 5, 10, 25, 50]))
推荐阅读
- android - 从 ListView 中的特定行获取特定 TextView 的值。安卓
- dependency-injection - 如何在 xamarin 形式的 Dependeny 注入中重新初始化视图模型的对象?
- javascript - angularjs:在html输入中只允许整数
- javascript - 如何在javascript中获取选定的文件路径
- python-3.x - 使用 python 请求下载的视频不起作用
- java - 原因:java.lang.ClassNotFoundException:在路径上找不到类“android.support.v4.animation.AnimatorCompatHelper”:DexPathList [[zip 文件
- javascript - 将css样式添加到jQuery中的单个元素
- osgi - 在 osgi 中是否需要同步 bundle 的激活和停用方法
- python - 无法重置轴
- ios - 显示未发生调用堆栈的崩溃日志