如何在递归编程中编写包含数组中所有元素的乘法表?

2024-06-16 11:31:01 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在创建一个包含数组中所有元素的乘法表,比如将所有元素(2,3,7,8,10)与第一个元素(2)相乘。然后,将新值(4,6,14,16,20)与第二个元素(3)相乘,依此类推

我可以通过一个循环相对简单地获得结果

def multiplication(arr):
    newArr = arr.copy()
    for j in range(len(arr)):
        newArr= [val*arr[j] for val in newArr]
    return newArr

print(multiplication([2,3,7,8,10]))

但是,当我尝试递归地求解它时,我无法用相乘的值保留原始元素

def multiplicationRecursively(arr, index=0):
    if (index >= len(arr)):
        return arr
    arr = [val*arr[index] for val in arr]
    return multiplicationRecursively(arr, index+1)

print(multiplicationRecursively([2,3,7,8,10]))

我做错什么了吗?我想我需要弄清楚如何保留原始数组以获得正确的乘法器?我正在学习递归编程,所以我不愿意使用可能的内置方法


Tags: in元素forindexlenreturndefval
3条回答

结果数组只不过是原始数组的所有元素与原始数组的每个元素的乘积。因此,我们可以编写如下递归:

def multiplicationRecursively(arr, mulitplier, index=1):

if (index <= len(arr) -1):
    mulitplier = mulitplier * arr[index]
    return multiplicationRecursively(arr, mulitplier, index+1)
return [mulitplier*val for val in arr]

print(multiplicationRecursively([2,3,7,8,10], 2))

这是一个有点古怪的答案,但我相信问题在于,你不再将每个值与它的原始值相乘

def multiplicationRecursively(arr: list, original = None, i = 0):

    if not original:
        return multiplicationRecursively(arr, arr.copy())

    #  Here is the base case
    if (i == len(arr)):
        return arr

    newArr = [v * original[i] for v in arr]
    
    return multiplicationRecursively(newArr, original, i + 1)


print( multiplicationRecursively( [2, 3, 7, 8, 10] ))

使用此方法,您将保留原始的多层,并最终得到相同的结果

这显然不是将其作为递归编写的最佳方式

我完全理解您面临的问题,使用此代码,您将获得预期的结果

 def multiplication_table(array, index = 0):

    multiplier = array.copy()
    
    if (index >= len(array)): 

     return ("")

    else:
        multipling_number = multiplier[index]
        table =[multipling_number*i for i in array]
        print (table, end='\n')

        return multiplication_table(array, index+1)

     Test: 
     array=[1,2,3,4,5]

     print(multiplication_table(array))
     output:
     [1, 2, 3, 4, 5]
     [2, 4, 6, 8, 10]
     [3, 6, 9, 12, 15]
     [4, 8, 12, 16, 20]
     [5, 10, 15, 20, 25]

相关问题 更多 >