Cómo multiplicar elementos de matriz sin usar bucle

Dato curioso: los lenguajes de programación puramente funcionales admiten bucles.

Una implementación en el lenguaje SML (metalenguaje estándar) sería

diversión multiply_list (xs: int list) =
si nulo xs
entonces 1
else hd xs * multiply_list (tl xs)


Probemos esto en un lenguaje más común. Pitón.

Las funciones de primera clase en un lenguaje le permiten escribir una función que permita pasar otras funciones como argumentos.

Plegar (función de orden superior) (también conocido como reducir ) es una de esas funciones que puede combinar de forma recursiva una estructura de datos para usted.

Definamos una función que pueda multiplicar dos números.

def multiplica (x, y):
retorno (x * y)

Pase esta función a la reducción de Python .

importar functools
matriz = [1, 2, 3, 4]
respuesta = reducir (multiplicar, matriz)

le dará el producto de todos los enteros de la matriz.

De documentos de Python:

functools.reduce(function, iterable[, initializer])

Aplique la función de dos argumentos acumulativamente a los elementos de secuencia , de izquierda a derecha, para reducir la secuencia a un solo valor. Por ejemplo,

reduce(lambda x, y: x+y, [1, 2, 3, 4, 5])

calcula ((((1+2)+3)+4)+5) .

(Implementación de reducción de los documentos).

def reduce (función, iterable, inicializador = Ninguno):
it = iter (iterable)
si inicializador es Ninguno:
tratar:
initializer = next (it)
excepto StopIteration:
raise TypeError (‘reduce () de secuencia vacía sin valor inicial’)
acumulo_valor = inicializador
para x en ella:
valor_acumulativo = función (valor_acumulativo, x)
devolver valor_acumulativo

puedes usar exactamente la recursividad

solo toma un caso

función multiplicar (índice)

{

if (index = (longitud de la matriz -1)

retorno 1;

más

{

matriz [índice] = matriz [índice] * matriz [índice + 1];

multiplicar (índice + 1);

}

}

Esto es fácil de entender método simple de hacerlo.

¿Puedes escribir un código recursivo para imprimir lo siguiente?

Dado N = 4, la recursividad debe imprimir lo siguiente, uno a la vez,

[0, 1]
[0, 2]
[0, 3]
[1, 2]
[1, 3]
[2, 3]

Si puede hacer eso, simplemente reemplace donde está imprimiendo [a, b] por (matriz [a] * matriz [b]).

More Interesting

Cómo encontrar un elemento en un árbol de búsqueda binario

Procesamiento de lenguaje natural: ¿Cuál es la mejor manera de detectar si un fragmento de texto es interrogativo?

¿Qué temas de algoritmos deberían cubrirse para convertirse en un buen programador?

¿Cuál es la complejidad de T (n) = 2T (n-3)?

¿Cuáles son algunos ejemplos interesantes con algoritmos evolutivos que se pueden implementar en una tarde o menos?

¿Debo aprender algoritmos y estructuras de datos de cada lenguaje de programación?

¿Cuál es el algoritmo de coincidencia utilizado por las declaraciones de consulta SQL del servidor SQL como "Me gusta 'A%'", "Me gusta '% A'" o "Me gusta '% A%'"?

¿Cómo se puede probar que la ruta única a través de un árbol de expansión mínima entre dos nodos es una ruta más corta de "cuello de botella"?

¿Desglosar el problema en piezas más pequeñas siempre ofrece una mejor solución?

¿Cuáles son algunos patrones de diseño de C ++ para aplicaciones en tiempo real como el comercio algorítmico?

¿Cuáles son los buenos algoritmos de similitud y métricas para textos cortos (menos de 50 palabras)?

¿Cuál es la forma más fácil / intuitiva de aprender sobre algoritmos y estructuras de datos?

¿Cuál es el algoritmo utilizado por Google para la búsqueda por voz e imagen?

Cómo implementar el algoritmo de colocación dinámica para Hadoop

En el 8 rompecabezas, ¿por qué solo es posible alcanzar la mitad de todas las combinaciones posibles desde cualquier estado dado?