Created
June 4, 2024 03:25
-
-
Save CarlosYazid/8bd8ee49720a233fa5ee91d2e378b4e8 to your computer and use it in GitHub Desktop.
5 retos de tail recursion y programación funcional
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
def factorial(num : int,base : int = 1) -> int: | |
"""### Factorial | |
Genera el factorial de num usando recursion | |
Args: | |
num (int): Limite Superior | |
base (int): Base. Uso exclusivo de la recursion. | |
Returns: | |
int: Factorial | |
Examples: | |
>>> factorial(4) | |
24 | |
>>> factorial(7) | |
5040 | |
""" | |
return base if abs(num) - 1 == 0 else factorial(abs(num) - 1, base * abs(num)) | |
def isPrime(num : int, redux : int | None = None, status : bool = True) -> bool: | |
"""### Es Primo | |
Verifica si un numero es primo. Usa recursion | |
Args: | |
num (int): Numero. | |
redux (int): n-esimo numero menor que num. Uso exclusivo de la recursion. | |
status (bool): estado temporal de in/divisivilidad. Uso exclusivo de la recursion. | |
Returns: | |
bool: True (Primo), False (Compuesto) | |
Examples: | |
>>> isPrime(73) | |
True | |
>>> isprime(1246) | |
False | |
""" | |
if redux is None: | |
redux = num - 1 | |
return status if (redux == 1 or status == False) else isPrime(num, redux - 1, status and num % redux != 0) | |
def sumC(num : int | None, sum_ : int = 0) -> int: | |
"""### Suma de Cifras | |
Suma las cifras de un numero. Usa recursion | |
Args: | |
num (int | None): Numero | |
sum_ (int): Suma temporal de cifras. Uso exclusivo de la recursión. | |
Returns: | |
int: Suma | |
Examples: | |
>>> sumC(123) | |
6 | |
>>> sumC(978) | |
24 | |
""" | |
num = None if num is None else abs(num) | |
return sum_ if num is None else sumC(int(str(num)[:-1]) if len(str(num)) > 1 else None, sum_ + (int(str(num)[-1]) if len(str(num)) > 0 else 0)) | |
def fibonacci(num : int, numBase : int = 0, numBase2 : int = 1) -> int: | |
"""### Fibonacci | |
Retorna el numero num de la serie de fibonacci | |
Args: | |
num (int): Indice | |
numBase (int): Primer numero base. Uso exclusivo de la recursion. | |
numBase2 (int): Segundo numero base. Uso exclusivo de la recursion. | |
Returns: | |
int: Numero de la serie de fibonacci de posision num | |
Example: | |
>>> fibonacci(9) | |
34 | |
""" | |
return numBase if num == 0 else (numBase2 if num == 1 else fibonacci(abs(num) -1, numBase2, numBase + numBase2)) | |
def isPerfect(num : int, redux : int | None = None, sum_ : int = 0) -> bool: | |
"""### Es perfecto | |
Verifica si un numero es Perfecto. Usa recursion. | |
Args: | |
num (int): Numero | |
redux (int | None): n-esimo numero menor que num. Uso exclusivo de la recursion | |
sum_ (int): Suma temporal de los divisores de num. Uso exclusivo de la recursion | |
Returns: | |
bool: True (Perfecto), False (Imperfecto) | |
Examples: | |
>>> isPerfect(6) | |
True | |
>>> isPerfect(28) | |
True | |
""" | |
if redux is None: | |
redux = num - 1 | |
return sum_ == num if (redux == 0) else isPerfect(num, redux - 1, sum_ + (redux if num % redux == 0 else 0)) | |
print(factorial(-7)) | |
print(isPrime(1246)) | |
print(sumC(978)) | |
print(fibonacci(2)) | |
print(isPerfect(8128)) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment