¿Hay alguna manera de devolver una matriz de recursividad?

Si puedes 100%

Aquí hay un ejemplo

int * getArray ()
{
static int a [10];
int i;
para (i = 0; i <10; ++ i)
{
a [i] = rand (); // algún valor
printf (“a [% d] =% d \ n”, i, a [i]);
}
devolver a;
}
int main ()
{
int * p;
int i;
p = getArray ();
para (i = 0; i <10; i ++)
{
printf (“* (p +% d):% d \ n”, i, * (p + i));
}
devuelve 0;
}

Explicacion:

int * getArray () {}

  • Dirección base de retorno de la matriz que es el nombre de la variable
  • Use el puntero de función para devolver el puntero, que es la dirección base de la matriz

Puntero = getarray ();

  • Almacenar el puntero devuelto en la variable de puntero
  • La dirección base se almacenará en el puntero donde está el valor. Ha regresado
  • Aumente el valor uno por uno hasta el límite deseado para acceder al valor
  • Eso es

Feliz codificación 🙂

Puede devolver la referencia a la matriz creada en la función. Pero hay una trampa. Las matrices normales creadas dentro de una función tienen un alcance solo dentro de la función. Entonces, si devuelve el puntero de matriz, la ubicación de la dirección podría no ser válida. ¿La solución? Cree la matriz dinámicamente y devuelva el puntero.

¡Si! De hecho, esto es extremadamente útil: en lenguajes que no tienen iteración, ¡así es como se implementan el mapa y el filtro!

(define (map proc lst)
(cond
[(¿vacío? lst) vacío]
[else (cons (proc (primer lst)) (map proc (rest lst)))]))

Usado:

> (mapa (lambda (n) (* n 2)) ‘(1 2 3 4 5 6))
«(2 4 6 8 10 12)
> (mapa ((curry *) 2) ‘(1 2 3 4 5 6))
«(2 4 6 8 10 12)

Para la lista vacía, devuelva una lista vacía; de lo contrario, devuelva una lista que es la función proporcionada por el usuario aplicada al primer elemento, más el resultado para el resto de la lista (llamada recursiva).

Y aquí está el filtro:

(definir (filtro pred lst)
(cond
[(¿vacío? lst) vacío]
[(pred (primer lst)) (contras (primer lst) (filtro pred (rest lst)))]
[else (filter pred (rest lst))]))

Usado:

> (filtro (lambda (n) (cero? (módulo n 2))) ‘(1 2 3 4 5 6))
«(2 4 6)
> (¿filtrar incluso? ‘(1 2 3 4 5 6))
«(2 4 6)
> (¿filtro impar? ‘(1 2 3 4 5 6))
«(1 3 5)

Si el predicado devuelve verdadero, agregue el elemento al encabezado del resultado para el resto de la lista; de lo contrario, no te molestes en agregarlo.

Tenga en cuenta que estos están trabajando con listas enlazadas individualmente, de modo que obtener el primer elemento ( first ), la cola ( rest ) o agregar al frente ( cons ) son operaciones de tiempo constante.

También tenga en cuenta que no son recursivos de cola: en realidad usarán stack, porque la última operación son las cons , no la llamada recursiva. Esto se puede solucionar agregando un argumento acumulador que mantiene la lista mientras se construye. El único problema es que el resultado se revertirá, y debe pasar una lista vacía inicial, pero ambos pueden solucionarse mediante una función de contenedor:

(define (map proc lst)
(definir (map-impl proc lst acum)
(cond
[(¿vacío? lst) acumulado]
[else (map-impl proc (rest lst) (cons (proc (first lst)) acum))]))
(inversa (map-impl proc lst empty)))

More Interesting

¿Cuál es la diferencia principal entre algoritmo y pseudocódigo?

Entre C # y Java, ¿cuál es el mejor lenguaje de programación para aprender programación orientada a objetos, estructuras de datos y algoritmos? ¿Por qué?

Programación de computadoras: Como ingeniero de software, ¿qué cosas crees que son "innecesariamente complicadas"?

En lenguajes como C y C ++, ¿por qué las matrices tienen que ser de tamaño constante?

¿Cuál es la forma más eficiente de recoger pelotas de tenis en una cancha?

¿Qué es la eficiencia del algoritmo?

Cómo escribir un programa ruby ​​para mostrar los números de Armstrong en una matriz (siendo la matriz; Números = [123,124,153,370,234,23,45]

Alguien en mi escuela secundaria dijo que en realidad no puedo resolver un cubo de Rubik porque tengo que confiar en patrones (algoritmos). ¿Cuán verdadera es esta afirmación?

¿De dónde debería comenzar a aprender el algoritmo? ¿Debería unirme a uno de los MOOC disponibles o leer libros como 'Introducción a los algoritmos'?

¿Cómo realizan las computadoras la multiplicación y la complejidad del tiempo?

¿Cómo se puede implementar un algoritmo de ordenación rápida en el cálculo Lambda?

¿Qué es el conocimiento estructurado?

Cómo eliminar duplicados en un vector C ++ y también si solo quiero elementos duplicados

¿Cuál es el enfoque algorítmico para el problema spoj SPOJ.com - Problema ROBOTGRI?

¿Pueden dos funciones hash criptográficas diferentes generar el mismo hash para la misma entrada?