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



我正在创建一个包含数组中所有元素的乘法表,例如将所有元素(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]))

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

生成的数组就是原始数组的所有元素与原始数组的每个元素的乘法。所以我们可以这样写一个递归:

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]

最新更新