• Jobs
  • About Us
  • Jobs
    • Home
    • Jobs
    • Courses and challenges
  • Businesses
    • Home
    • Post vacancy
    • Our process
    • Pricing
    • Assessments
    • Payroll
    • Blog
    • Sales
    • Salary Calculator

0

204
Views
Optimización de función recursiva matemática de Javascript

esto es lo que tengo

 let base = 10000 let yearly = 31557600 let apy = 0.09 let loop = 0; let new_base = '0'; function recurse(base){ new_base = base*(1+apy*1/(yearly)); if(loop < 3600){ loop++; return recurse(new_base); } else { return new_base; } } base = recurse(base); console.log(base);

si cambio 3600 por un número muy grande, aparece el error: se excedió el tamaño máximo de la pila de llamadas

Esto me parece normal porque la operación recursiva se ejecuta demasiadas veces,

cual seria la solucion ¿Es posible transformar la función recursiva en una función lineal, por ejemplo?

Gracias

over 3 years ago · Juan Pablo Isaza
2 answers
Answer question

0

Bueno, se puede transformar en una ecuación, pero no en una lineal.

Aquí está el enfoque:

Cambiaré el nombre de la base como b0, y la nueva base como b1

b1 = b0 * (1 + (apy/anual)

y después de que se incremente el bucle, se actualizará la nueva base, llamemos al nuevo b1 como b2:

b2 = b1 * (1 + (apy/anual))

b2 = b0 * (1 + (apy/anual))^2

y así..

por lo que el valor final devuelto será:

base * (1 + (apy/anual))^3600

y la fórmula general será

base * (1 + (apy/anual))^n, donde n es 3600 en su caso.

Poniendo las constantes enchufadas obtendrás 10,000.102669931423184360664719158

Recuerde votar esta respuesta si resuelve su problema.

over 3 years ago · Juan Pablo Isaza Report

0

¿Necesita recursividad? No.

 function recurse2(base){ new_base = base*(1+apy*1/(yearly)); for(loop = 1; loop < 100; loop++){ new_base = base*(1+apy*1/(yearly)); } return new_base; }

Ni siquiera sigues la optimización. Este es solo un valor que está siendo mutado una y otra vez. No necesita un nuevo marco de pila (llamada a función) para mutar dicho valor, simplemente recorra sobre él.

¿Cómo llegué a esta función? Solo piense qué le sucede a la base cuando la pasa y cómo cambia con cada "recursión". Simplemente se multiplica por alguna expresión cada vez. Así que podemos hacer eso en un bucle.

Incluso puedes mejorar el fragmento de código que tengo aquí con do {} while();

La siguiente captura de pantalla muestra pruebas rápidas que muestran que la función recurse2 que escribí es idéntica*. ingrese la descripción de la imagen aquí

over 3 years ago · Juan Pablo Isaza Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Our process Sales
Legal
Terms and conditions Privacy policy
© 2025 PeakU Inc. All Rights Reserved.

Andres GPT

Show me some job opportunities
There's an error!