Lista 1 MD2 231039113
#1. Cálculo de n! utilizando recursividade
if n<2:
return n
else:
print(n)
return n*fat(n-1)
while True:
try:
ntermo = int(input("insira numero para fatoriar: "))
break
except:
print("insira um valor valido")
if (ntermo == 0 or ntermo == 1):
print("1")
else:
print(fat(ntermo))
##2. a sequência de Fibonacci
#criei uma lista de n termos (ex quero fibo de 5), para cada termo eu faco a soma
def fibo(n):
if n <= 1:
return n
else:
return (fibo(n-1)+fibo(n-2)) #prox termo vai ser termo anterior menos o 2x anterior
while True:
try:
nterms = int(input("insira n de termos do fibonacci: "))
break
except:
print("insira um valor valido")
if nterms <= 2:
print("insira um valor valido")
else:
for i in range(nterms):
print(fibo(i))
#3. a impressão recursiva dos números naturais de 1 a n (exemplo teste 1 a 10)
def natural(a, n, sequencia=None):
if sequencia is None:
sequencia = []
if a > n:
print(" + ".join(map(str, sequencia)))
return
sequencia.append(a)
natural(a+1, n, sequencia)
def main():
while True:
try:
n = int(input("Digite um numero inteiro NATURAL: \n"))
if n < 1:
print("Numero invalido, tente novamente \n")
else:
break
except ValueError:
print("Numero invalido, tente novamente \n")
natural(1,n)
main()
#4. um método recursivo que receba como entrada um número inteiro positivo n e retorne
1 + 2 + 3 + 4 + … + n
def aten(n, sequencia=None):
if sequencia is None:
sequencia = [] #vetor para guardar os valores
if n == 0:
sequencia.insert(0, n) #colocando o 0 no vetor
print(" + ".join(map(str, sequencia))) #printando os valores formatados em n + n-1 + n-2 ...
return 0 #retornando a soma / ou 0 se for o caso
else:
sequencia.insert(0, n) # colocando os valores no vetor
return n + aten(n - 1, sequencia)
def main():
while True:
try:
n = int(input("Digite um numero inteiro maior ou igual a zero: \n"))
if n < 0:
print("Numero invalido, tente novamente \n")
else:
break
except ValueError:
print("Numero invalido, tente novamente \n")
print("A soma de 1 ate", n, " = ", aten(n))
main()
#5. Algoritmo de Euclides para o cálculo do MDC
def euclides(n1,n2):
if(n1 == 0):
return n2
if(n2 == 0):
return n1
print("numeros digitados: ",n1,n2)
r = 100
while(r != 0):
r = n1 % n2
n1 = n2
n2 = r
else:
return n1
def mdc(n1,n2):
resultado = euclides(n1,n2)
print("MDC:",resultado)
def main():
print("Digite dois numeros inteiros \n")
while True:
try:
n1 = int(input("Digite o primeiro numero: \n"))
break
except ValueError:
print("Numero invalido, tente novamente \n")
while True:
try:
n2 = int(input("Digite o segundo numero: \n"))
break
except ValueError:
print("Numero invalido, tente novamente \n")
mdc(n1,n2)
main()
#6. Calcular o MMC(a,b) a partir do MDC(a,b)
def euclides(n1,n2):
if(n1 == 0):
return n2
if(n2 == 0):
return n1
print("numeros digitados: ",n1,n2)
r = 100
while(r != 0):
r = n1 % n2
n1 = n2
n2 = r
else:
return n1
def mdc(n1,n2):
resultado = euclides(n1,n2)
return resultado
def mmc(n1,n2,n3):
return n1 * n2 // n3
def main():
print("Digite dois numeros inteiros \n")
while True:
try:
n1 = int(input("Digite o primeiro numero: \n"))
break
except ValueError:
print("Numero invalido, tente novamente \n")
while True:
try:
n2 = int(input("Digite o segundo numero: \n"))
break
except ValueError:
print("Numero invalido, tente novamente \n")
n3 = mdc(n1,n2)
print("O mmc de",n1,"e",n2,"usando o mdc eh:",mmc(n1,n2,n3))
main()
#7. Tabela Z_n para adição modular
def tab_add(n):
tab = [[(a + b) % n for b in range(n)] for a in range(n)]
return tab
def tab_show(tab):
print("Tabela Zn modular de adicao:")
for line in tab:
print(" ".join(f"{num:2}" for num in line))
def main():
while True:
try:
n = int(input("Digite um numero inteiro maior que 1: "))
if n < 2:
raise ValueError
break
except ValueError:
print("Digito invalido.")
break
tab = tab_add(n)
tab_show(tab)
main()
#8. Tabela Z_n para multiplicação modular
def tabx(n):
tab = [[(a * b) % n for b in range(n)] for a in range(n)]
return tab
def tab_show(tab):
# Exibe a tabela formatada
print("Tabela de multiplicação :")
for line in tab:
print(" ".join(f"{num:2}" for num in line))
def main():
while True:
try:
n = int(input("Digite um numero inteiro maior que 1: "))
if n < 2:
raise ValueError
break
except ValueError:
print("Digito invalido.")
break
tab = tabx(n)
tab_show(tab)
main()