Попытка вернуть значения с помощью рекурсии, но значения не отображаются - PullRequest
0 голосов
/ 21 октября 2019
def multAll(k, A):
    return multAllRec(k,A,0)

def multAllRec(k,A,i):
    if i == A[len(A)-1]:
        return

    if i < len(A):
        A[i] = A[i]*k
        return A[i]

    return multAllRec(k, A, i+1)

multAll(10,[5,12,31,7,25])

Я использую python для создания рекурсивной функции, которая умножает элементы в массиве на переменную k. Здесь в этом коде я выполняю рекурсивную функцию, но она возвращает 50 только тогда, когда она должна возвращать [50,120,310,70,250]. Это только умножение первого элемента массива.

Что я делаю не так?

Ответы [ 3 ]

1 голос
/ 21 октября 2019

В вашем коде вы должны изменить 2 строки, вернуть A по завершению и не возвращать A [i] при обновлении значения

Редактировать: сравнивать длину, используя len(A)

def multAll(k, A):
    return multAllRec(k,A,0)

def multAllRec(k,A,i):
    if i == len(A):
        return A

    if i < len(A):
        A[i] = A[i]*k
    return multAllRec(k, A, i+1)

multAll(10,[5,12,31,7,25])
1 голос
/ 21 октября 2019

Функция должна возвращать список только с умноженным первым элементом списка, передавая остальные элементы рекурсивному вызову:

def multAll(k, A):
    return A and [k * A[0], *multAll(k, A[1:])]

так, чтобы:

multAll(10, [5, 12, 31, 7, 25]

возвращает:

[50, 120, 310, 70, 250]
0 голосов
/ 21 октября 2019

Зачем здесь использовать рекурсию? Похоже, больше работы, чем необходимо. Просто используйте для цикла или понимания.

def multAll(k, A):
    return [k*n for n in A]    

print(multAll(10,[5,12,31,7,25]))
...