Produce la suma de los primeros n valores en una matriz.
function sum(arr, n) { if (n <= 0 ){ return 0; } else { return sum(arr, n-1) + arr[n-1]; } }Hola, tengo esta función recursiva simple de freecodecamp. Entiendo el concepto de recursión, sin embargo, parece que no puedo entender por qué esto funciona en este caso de uso exacto.
Principalmente estoy luchando por comprender cómo se aumenta y almacena el recuento para producir una suma total final, así como por qué la función no devuelve 0 como la suma una vez que llega a su punto de interrupción.
Cualquier explicación es apreciada, gracias.
Además, esto no es para un proyecto ni nada por el estilo, solo trato de entender mejor este concepto.
Piense en cada llamada recursiva como si agregara un marco a la pila. Todos los marcos llamados deben dar una respuesta antes de que pueda calcular la respuesta para el marco actual.
El programa de llamadas comienza:
FRAME_A sum([5,7,10],3) n <= 0: False answer here = sum([5,7,10],2) + 10 ^ wait for this to be computed let's call this WAIT_A -------- FRAME_B sum([5,7,10],2) n <= 0: False answer here = sum([5,7,10],1) + 7 ^ wait for this to be computed let's call this WAIT_B --------- FRAME_C sum([5,7,10],1) n <= 0: False answer here = sum([5,7,10],0) + 5 ^ wait for this to be computed let's call this WAIT_C --------- FRAME_D sum([5,7,10],0) n <= 0: True return 0 FRAME_D is done. (Now, we are rolling back) WAIT_C is now 0. FRAME_C answer is 0 + 5 = 5. FRAME_C is done. WAIT_B is now 5. FRAME_B answer is 5 + 7 = 12. FRAME_B is done. WAIT_A is now 12. FRAME_A answer is 12 + 10 = 22. FRAME_A is done. All frames are done. Final answer = 22.