Actualmente estoy tratando de entender Python y he llegado a un punto muerto en las funciones recursivas. En Think Python, uno de los ejercicios es escribir una función que determina si el número un es una potencia del número b usando la siguiente definición:¿Por qué mi función recursiva devuelve None?
"Un número, una, es una potencia de b si es divisible por by a/b es una potencia de b. Escribe una función llamada is_power que toma los parámetros a y b y devuelve True si a es una potencia de b ".
El estado actual de mi función es:
def isPower(a,b):
return a % b == 0 and (a/b) % b == 0
print isPower(num1,num2)
Tal como es, esto produce el resultado que esperaba. Sin embargo, el capítulo se centra en escribir funciones recursivas para reducir la redundancia y no estoy muy seguro de cómo puedo convertir el final "(a/b)% b == 0" en una recursión. Lo intenté:
def isPower(a,b):
if a % b != 0:
return False
elif isPower((a/b),b):
return True
Pero eso simplemente devuelve None.
¿Cuál es la forma correcta de recurrir esta función?
Se debe tener cuidado de que el significado del operador '/' ha cambiado en Python 3+, desde devolver un número entero hasta devolver un flotador, para que tu código se rompa. Cambie a '//' en su lugar, que siempre devolverá un int. –
tenga en cuenta que su primer intento no verifica si a es una potencia de b, sino que si a es un múltiplo de b^2. prueba isPower (12,2), devolvería True. – Javier
Solo así se dice, su primera versión de isPower está rota: solo mostrará si 'a' es un múltiplo de' b^2'. Volverá a ser cierto para 'isPower (2, 1)', por ejemplo, que nunca debería ser cierto. Para el caso, es posible que desee asegurarse de que cualquier versión recursiva compruebe si '(b == 1 && a! = 1)' antes de continuar, o se quedará atascado en un bucle infinito o devolverá algo incorrecto. – cHao