Buenas, para quien revise este ejercicio comentar algunas cuestiones:
- Si introducimos como datos de entrada (2.55, 2) el resultado esperado sería 255 pero al menos yo he obtenido 254,9999999... Este problema de "precisión decimal" relacionado con la forma que tienen los computadores de representar valores numéricos se comenta en
https://aprenderaprogramar.com/foros/index.php?topic=1972.0 (en este hilo se presenta una solución del ejercicio de forma clásica o iterativa).
- Una peculiaridad que tiene esta forma de resolver el ejercicio es que hace uso de la recursión (ésta no se trata en el curso, por tanto no es necesario resolver el ejercicio de esta manera). Recursión es la llamada a un método por parte de ese mismo método, generando una "cascada de llamadas" que no se resuelve hasta que se llega a un "caso base" que permite determinar una solución. En este caso si llamamos multiplicarPorDieces (30, 2) tenemos
-- Invocación 1: devuelve 30*10*multiplicarPorDieces(1, 1)
-- Invocación 2: devuelve 10*multiplicarPorDieces(1, 0)
-- Invocación 3: devuelve 1, esto permite resolver
-- Resolución de invocación 2 a partir de la 3: 10*1
-- Resolución de invocación 1 a partir de la 2: 30*10*10*1 = 3000
La recursividad resulta más compleja de manejar y de plantear que la solución clásica (iterativa), por ello muchos programadores prefieren no usarla, aunque es una técnica que puede ser interesante. En el hilo
https://aprenderaprogramar.com/foros/index.php?topic=1536.0 puede verse otra solución recursiva, junto a otra solución iterativa clásica.
En este ejercicio posiblemente dejar la recursión con un único parámetro para obtener la potencia, en lugar de hacer recursiones con dos parámetros (si nos fijamos al usar multiplicarPorDieces44 (1, b-1) la recursión se hace siempre con el primer parámetro fijado como 1, lo cual no parece muy eficiente.
Quien lo desee, puede profundizar en determinar las diferencias entre las dos soluciones recursivas propuestas y las soluciones iterativas clásicas.
Salu2