Как заменить цикл на рекурсию в python?
У меня возникла проблема.
Как заменить два цикла, на одну функцию которая содержит рекурсию.
for i in range(0,1):
for j in range(1,len(A)):
Вот весь код.
import numpy as np
lest =0
def matrix(B,z):
result = 1 in B
return "Номер строки "+str(z)+", найдено совпадений: "+str(result)+ " строке"
A = np.array([[1, 4, 5, 0],
[-5, 8, 9, 1],
[1, 7, 11, 19],
[1, 2, 4, 1]])
print("Сравнения с первой строкой:\n")
for i in range(0,1):
for j in range(1,len(A)):
b = list(map(lambda x, y: lest+1 if x == y else lest+0,A[i],A[j]))
print(matrix(b,j+1))
Спасибо за внимания.
Ответы (1 шт):
Автор решения: asanisimov
→ Ссылка
Не совсем понимаю необходимость, можно просто убрать первый цикл, и все сравнивать с 1ым элементом, но если очень нужна рекурсия, то вот. Делает то же самое, только рекурсивно.
def matrix(B, z):
result = 1 in B
# не желательно форматировать строку сложением строк.
return "Номер строки {}, найдено совпадений: {} строке".format(str(z), str(result))
A = np.array([[1, 4, 5, 0],
[-5, 8, 9, 1],
[1, 7, 11, 19],
[1, 2, 4, 1]])
print("Сравнения с первой строкой:\n")
def work(mtx: np.array) -> None:
lest = 0
len_mtx = len(mtx)
if len_mtx == 2: # граничный случай
last = mtx[-1]
b = list(map(lambda x, y: lest + 1 if x == y else lest, mtx[0], last))
print(matrix(b, 2))
else: # рекурсивный случай
last, mtx_n = mtx[-1], mtx[:-1]
b = list(map(lambda x, y: lest + 1 if x == y else lest, mtx[0], last))
work(mtx_n)
print(matrix(b, len_mtx))
work(A)