首页 > 解决方案 > 递归地将列表中的每个元素相乘

问题描述

我正在尝试不使用循环将 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]))

标签: pythonrecursion

解决方案


修改原件

你离得并不远。您需要注意如何从递归调用中返回。

修改原始文件时,您的递归案例需要有所不同。只需将第一个元素相乘并就地更新。在递归调用中传递整个列表。此外,有一个函数参数跟踪要修改的当前索引。

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:](也是一个列表)连接。

在基本情况下,返回一个空列表。


推荐阅读