Función recursiva C? -- ampo con recursion camp Relacionados El problema

Recursive function C?


1
vote

problema

Español

¿Por qué funciona esta función recursiva? Tengo problemas para entender por qué no se sigue llamando a sí mismo hasta n = 1 y luego detenerse, no ejecutando nada por debajo de donde se llama.

  int main(){     int t[] = {7,9,6,4,2};     int min, max;     search_extremes_rec(t, sizeof(t)/sizeof(t[0]), &min, &max);     printf("min: %d, max: %d", min, max);     return 0; } void search_extremes_rec(const int t[], int n, int *min, int *max){     if(n<=1){         *min = t[0];         *max = t[0];     }else{         search_extremes_rec(t, n-1, min, max);         if(*min > t[n-1]){             *min = t[n-1];         }            else if(*max < t[n-1]){             *max = t[n-1];         }     } }   
Original en ingles

Why does this recursive function work? I'm having trouble understanding why it doesn't keep calling itself until n=1 and then stop, not executing anything below where it calls itself.

int main(){     int t[] = {7,9,6,4,2};     int min, max;     search_extremes_rec(t, sizeof(t)/sizeof(t[0]), &min, &max);     printf("min: %d, max: %d", min, max);     return 0; } void search_extremes_rec(const int t[], int n, int *min, int *max){     if(n<=1){         *min = t[0];         *max = t[0];     }else{         search_extremes_rec(t, n-1, min, max);         if(*min > t[n-1]){             *min = t[n-1];         }            else if(*max < t[n-1]){             *max = t[n-1];         }     } } 
     
       
       

Lista de respuestas

2
 
vote
vote
La mejor respuesta
 

Cada vez que desee averiguar qué funciona una función recursiva, inserte un par de impresiones.

  (d{4}-d{2}-d{2})T(d{2}:d{2}:d{2}.d*?)0*Z 6  

Salida:

  (d{4}-d{2}-d{2})T(d{2}:d{2}:d{2}.d*?)0*Z 7  

Como puede ver, de hecho continúa hasta N = 1.

 

Whenever you want to find out what a recursive function does, insert a couple of printouts.

 void search_extremes_rec(const int t[], int n, int *min, int *max){         printf("Entering search_extremes_rec. n:%d\n", n);         if(n<=1){                 printf("Base case. Exiting\n");                 *min = t[0];                 *max = t[0];         }else{                 printf("Calling recursively...\n");                 search_extremes_rec(t, n-1, min, max);                 printf("Recursive call done. n:%d min:%d max:%d\n", n, *min, *max);                  if(*min > t[n-1]){                         *min = t[n-1];                 }                 else if(*max < t[n-1]){                         *max = t[n-1];                 }         } } 

Output:

 $ ./a.out  Entering search_extremes_rec. n:5 Calling recursively... Entering search_extremes_rec. n:4 Calling recursively... Entering search_extremes_rec. n:3 Calling recursively... Entering search_extremes_rec. n:2 Calling recursively... Entering search_extremes_rec. n:1 Base case. Exiting Recursive call done. n:2 min:7 max:7 Recursive call done. n:3 min:7 max:9 Recursive call done. n:4 min:6 max:9 Recursive call done. n:5 min:4 max:9 min: 2, max: 9 

As you can see, it does indeed continue until n=1.

 
 

Relacionados problema

2  Cómo analizar un árbol XML con DOMDocument?  ( How to parse an xml tree with domdocument ) 
Aquí está mi archivo XML: <?xml version="1.0" encoding="utf-8"?> <root> <category> <name>Category</name> <desc>Category</desc> ...

1  ¿Por qué mi función recursiva de JavaScript con promesas falla?  ( Why my recursive javascript function with promises fails ) 
Tengo un objeto JSON que necesito para limpiar las propiedades que comienzan con $ . Así que se le da la estructura a continuación, debe deshacerse de $aaa ...

1  ¿Por qué no unificó este predicado prólogo?  ( Why wont this prolog predicate unify ) 
Estoy escribiendo un predicado para encontrar todos los estados sucesores posibles para una iteración de un * y ponerlos en una lista como [(costo, estado), ....

7  ¿Cuál es la mejor manera de manejar la recursión en Smarty?  ( What is the best way to handle recursion in smarty ) 
Encontré un par de maneras de manejar la recursión en Smarty, en su mayoría basándose en incluidas las plantillas en sí mismas, lo que parece ridículo desperd...

4  JavaScript: recursivamente cuenta numero de niños en un árbol  ( Javascript recursively count number of children in a tree ) 
Tenemos una estructura de árbol JSON que mantiene a los niños de un nodo específico. Este parámetro para niños es indefinido (no hay niños) o una matriz. Qu...

121  ¿Qué es la recursión y cuándo debo usarlo?  ( What is recursion and when should i use it ) 
Bloqueado . Esta pregunta y sus respuestas son bloqueadas porque la pregunta es off-topic pero tiene importancia histórica. Actualmente no está a...

1  PHP + MYSQL: Encontrar Total de valores recursiéndose a través de grupos de niños matriz MYSQL  ( Php mysql finding total of values by recursing through mysql parent children ) 
Tengo una tabla MySQL como esta: carpetas [id] [name] [parent_id] 1 fruits 0 2 orange 1 3 lemon 2 4 steak 0 proyectos [id] [...

1  Editar recursivamente un archivo de un nombre determinado  ( Recursively edit a file of a certain name ) 
Necesito un script que hará lo siguiente, pero no tengo idea de cómo acercarse a la idea. escanear recursivamente un directorio / inicio / raíz / multicraf...

2  Árboles de búsqueda binaria  ( Binary search trees ) 
Tengo una pregunta con respecto a la implementación de árboles de búsqueda binaria en C ++. Aquí está la pregunta a continuación Implementar un BST simple (...

2  No se puede obtener la respuesta de PROMESEE con la llamada recursivamente a la función en NOde.js  ( Unable to get response from promiese with recursively calling the function in no ) 
Trabajando con nodo.js q Promises biblioteca Estoy en duda que sea útil con la llamada recursivamente a una función. Había intentado dos enfoques para resolve...




© 2022 respuesta.top Reservados todos los derechos. Centro de preguntas y respuestas reservados todos los derechos