python - 递归地将列表中的每个元素相乘
问题描述
我正在尝试不使用循环将 python 中列表 A 的每个元素乘以 int k 递归。到目前为止,我的代码不正确,因为它没有修改原始数组而是创建了一个副本 A。我意识到我必须定义一个辅助函数multAllRec(k,A,i)
来执行此操作,并且想知道如何执行此操作。
def multAll(k,A):
if A == []:
return
A[0] = A[0]*k
return multAll(k, A[1:])
print(multAll(10, [5,12,31,7,25]))
解决方案
修改原件
你离得并不远。您需要注意如何从递归调用中返回。
修改原始文件时,您的递归案例需要有所不同。只需将第一个元素相乘并就地更新。在递归调用中传递整个列表。此外,有一个函数参数跟踪要修改的当前索引。
def multAll(A, i, k):
if i < len(A):
A[i] *= k
multAll(A, i+1, k)
A = [5, 12, 31, 7, 25]
multAll(A, 0, 10)
print(A)
[50, 120, 310, 70, 250]
返回一个新列表
def multAll(A, k):
if not A:
return []
return [A[0] * k] + multAll(A[1:], k)
print(multAll([5, 12, 31, 7, 25], 10))
[50, 120, 310, 70, 250]
从递归调用返回时,将第一个元素与 相乘,将其k
列出,然后与操作的递归调用的结果A[1:]
(也是一个列表)连接。
在基本情况下,返回一个空列表。
推荐阅读
- javascript - 如何在 TypeScript 中推断参数类型?
- python - 如何抓取我不是管理员的 Facebook 页面
- java - Android quiz 如何根据答案显示问题?
- tmux - 在 MinTTY 中使用 Tmux 时滚动鼠标时如何进入复制模式?
- javascript - JavaScript 中的二元数据表
- unity3d - ScriptableObject 数据在编辑器模式下从代码修改,但包含资产文件未更改
- r - Sapply:R中标准差的特征
- java - Recycler ItemClick 不适用于倒数计时器
- javascript - Angular - 循环检查对象内部是否存在值
- c++ - Windows 应用程序无法停止并挂起