Skip to content

Instantly share code, notes, and snippets.

@CarlosYazid
Created June 4, 2024 03:25
Show Gist options
  • Save CarlosYazid/8bd8ee49720a233fa5ee91d2e378b4e8 to your computer and use it in GitHub Desktop.
Save CarlosYazid/8bd8ee49720a233fa5ee91d2e378b4e8 to your computer and use it in GitHub Desktop.
5 retos de tail recursion y programación funcional
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