Diferència entre revisions de la pàgina «ASIX-M3-UF2-A3.1-Exercicis recursivitat»
(→Recursivitat seguiment codi) |
|||
(17 revisions intermèdies per 2 usuaris que no es mostren) | |||
Línia 7: | Línia 7: | ||
def p1(num): | def p1(num): | ||
if (num>0): | if (num>0): | ||
− | print(num | + | print(num,” “) |
p1(num-1) | p1(num-1) | ||
else: | else: | ||
Línia 16: | Línia 16: | ||
def p1(num): | def p1(num): | ||
if (num>0): | if (num>0): | ||
− | print(num | + | print(num,” “) |
p1(num-1) | p1(num-1) | ||
else: | else: | ||
print(“final”) | print(“final”) | ||
− | print(num | + | print(num,” “) |
print(”final de veritat “) | print(”final de veritat “) | ||
</source> | </source> | ||
Línia 31: | Línia 31: | ||
def p2(num1 , num2): | def p2(num1 , num2): | ||
if (num1%num2!=0): | if (num1%num2!=0): | ||
− | print(num1 | + | print(num1,” “) |
p2(num1+1,num2) | p2(num1+1,num2) | ||
else: | else: | ||
Línia 40: | Línia 40: | ||
def p2(num1 , num2): | def p2(num1 , num2): | ||
if (num1%num2!=0): | if (num1%num2!=0): | ||
− | print(num1 | + | print(num1,” “) |
p2(num1+1,num2) | p2(num1+1,num2) | ||
print(“final”) | print(“final”) | ||
Línia 53: | Línia 53: | ||
p3(num1-1,num2+num1) | p3(num1-1,num2+num1) | ||
else: | else: | ||
− | print(num2 | + | print(num2,” “) |
</source> | </source> | ||
Línia 61: | Línia 61: | ||
<source lang="python"> | <source lang="python"> | ||
for i in range(1,6): | for i in range(1,6): | ||
− | print (“p3 (“ | + | print (“p3 (“, i+”):”) |
p3 (i,0) | p3 (i,0) | ||
</source> | </source> | ||
Línia 70: | Línia 70: | ||
if (num> 0): | if (num> 0): | ||
p4(num-1) | p4(num-1) | ||
− | print(num | + | print(num,” “) |
else: | else: | ||
print(”fi? “) | print(”fi? “) | ||
Línia 79: | Línia 79: | ||
if (num> 0): | if (num> 0): | ||
p4(num-1) | p4(num-1) | ||
− | print(num | + | print(num,” “) |
print(”fi? “) | print(”fi? “) | ||
</source> | </source> | ||
Línia 89: | Línia 89: | ||
def p5(num): | def p5(num): | ||
if (num>0): | if (num>0): | ||
− | print(num | + | print(num, end=" ") |
num=num-1 | num=num-1 | ||
p5(num) | p5(num) | ||
− | + | print(num, end=" ") | |
</source> | </source> | ||
Línia 100: | Línia 100: | ||
<source lang="python"> | <source lang="python"> | ||
def p6(num): | def p6(num): | ||
− | print(num | + | print(num, end=” “) |
for i in range(num, 0, -1): | for i in range(num, 0, -1): | ||
p6(i-1) | p6(i-1) | ||
Línia 122: | Línia 122: | ||
<source lang="python"> | <source lang="python"> | ||
def f2(num): | def f2(num): | ||
− | + | if (num>0): | |
− | + | f= f2(num-1) + num | |
− | + | else: | |
− | + | f=0 | |
− | + | return f | |
+ | ret=f2(10) | ||
+ | print(ret,end=" ") | ||
</source> | </source> | ||
Línia 133: | Línia 135: | ||
9) | 9) | ||
<source lang="python"> | <source lang="python"> | ||
− | + | def f3(num): | |
− | + | if (num>0): | |
− | if ( | + | r=num |
− | r= | + | for i in range(num-1, 0, -1): |
− | for ( | + | r= r + f3(i) |
− | r= r + f3(i) | + | f=r |
− | + | else: | |
− | f=r | + | f=num |
− | + | return f | |
− | |||
− | return f | ||
− | |||
</source> | </source> | ||
Línia 153: | Línia 152: | ||
10) | 10) | ||
<source lang="python"> | <source lang="python"> | ||
− | + | def f4(x): | |
− | + | if (x> 100): | |
− | if (x> 100) | + | f=x-10 |
− | else f= f4(f4(x+11)) | + | else: |
− | return f | + | f= f4(f4(x+11)) |
+ | return f | ||
} | } | ||
</source> | </source> | ||
Línia 165: | Línia 165: | ||
==Recursivitat codi== | ==Recursivitat codi== | ||
− | + | 0. Fes un meńu per escollir l'exercici a executar: el menú es trobarà en un fitxer diferent dels exercicis i aquests s'ubicaran en el mateix mòdul. | |
− | + | 1. Escriure una funció recursiva que donat un número N (N ≥ 0) passat com a paràmetre calculi la suma de tots els números enters fins a N inclòs. | |
− | + | 2. Escriure una funció recursiva que calculi el resultat de X elevat a N amb N >0, sabent que X0 = 1. | |
− | + | 3. Escriu una funció recursiva per calcular la suma digital d’un número natural. Per exemple, la suma digital de 18624 és: 4 + 2 + 6 + 8 + 1 = 21 | |
− | + | 4. Dissenyeu un algoritme recursiu que calculi el màxim comú divisor de dos enters positius, sabent que : | |
<pre> | <pre> | ||
MCD( X, Y) = MCD (X-Y, Y) SI X > Y | MCD( X, Y) = MCD (X-Y, Y) SI X > Y | ||
Línia 179: | Línia 179: | ||
X SI X = Y | X SI X = Y | ||
</pre> | </pre> | ||
− | + | 5. Fes la funció recursiva SumaHarmonica (n) que retorna la suma: | |
<pre> | <pre> | ||
1 + 1/2 +1/3 + ... + 1/n | 1 + 1/2 +1/3 + ... + 1/n | ||
</pre> | </pre> | ||
− | |||
− | + | 6. Fes una funció recursiva booleana que donats un número i un dígit retorni si aquest dígit pertany al número. Per exemple: | |
+ | <pre> | ||
+ | existeix(1234,3) → true | ||
+ | existeix(1234,7) → false | ||
+ | </pre> | ||
− | + | 7. Fes una funció que calculi el producte segons el mètode rus que diu que: | |
<pre> | <pre> | ||
x*y = ((2*x) *(y/2)) SI y es parell | x*y = ((2*x) *(y/2)) SI y es parell | ||
Línia 195: | Línia 198: | ||
</pre> | </pre> | ||
− | + | 8. Torres de Hanoi (amb N introduïda per l’usuari com a paràmetre). S’ha d’anar visualitzant la solució per pantalla. | |
+ | |||
+ | 9. Fes una funció recursiva que ompli un tauler n-goro. Un tauler n-goro és una matriu de n files i n+1 columnes que s'omple consecutivament en diagonal i quan ens sortim per una banda entrem per l'altra. L'últim element que s'omple serà l'extrem inferior dret. | ||
<pre> | <pre> | ||
Per exemple amb n=3 | Per exemple amb n=3 | ||
Línia 210: | Línia 215: | ||
16 12 8 4 20 | 16 12 8 4 20 | ||
</pre> | </pre> | ||
− | |||
− | |||
− | + | ||
− | - | + | 10. Potencias |
+ | Ene ste ejercicio vamos a trabajar con las potencias. Debemos realizar una función en Python a la cual le pase dos parametros (x,y), uno de ellos es la base y el otro el exponente. La función me debe devolver el resultado de esa potencia. | ||
+ | |||
+ | <source lang="python"> | ||
+ | |||
+ | #Sin recursividad | ||
+ | |||
+ | def potencia(base,exp): | ||
+ | if exp==0: | ||
+ | return 1 | ||
+ | else: | ||
+ | r=base | ||
+ | for x in range (1,exp): | ||
+ | r=base*r | ||
+ | return r | ||
+ | print(potencia(2,5)) | ||
+ | |||
+ | 32 | ||
+ | |||
+ | #Con recursividad | ||
+ | |||
+ | def potencia_r(base,exp): | ||
+ | if exp==0: | ||
+ | return 0 | ||
+ | if exp==1: | ||
+ | return base | ||
+ | else: | ||
+ | return base * potencia_r(base,exp-1) | ||
+ | print(potencia_r(2,5)) | ||
+ | |||
+ | 32 | ||
+ | </source> |
Revisió de 17:46, 22 feb 2024
Recursivitat seguiment codi
Indicar quina serà la sortida dels procediments següents:
1a)
def p1(num):
if (num>0):
print(num,” “)
p1(num-1)
else:
print(“final”)
1b)
def p1(num):
if (num>0):
print(num,” “)
p1(num-1)
else:
print(“final”)
print(num,” “)
print(”final de veritat “)
Quina seria la sortida si executéssim p1(6)?
2a)
def p2(num1 , num2):
if (num1%num2!=0):
print(num1,” “)
p2(num1+1,num2)
else:
print(“final”)
2b)
def p2(num1 , num2):
if (num1%num2!=0):
print(num1,” “)
p2(num1+1,num2)
print(“final”)
Quina seria la sortida si executéssim p2(10,8)?
3)
def p3(num1, num2):
if (num1 > 0):
p3(num1-1,num2+num1)
else:
print(num2,” “)
Quina seria la sortida si executéssim p3(5,3)?
Quina seria la sortida si eliminéssim el else ( fent sempre el print ) i des del programa principal féssim:
for i in range(1,6):
print (“p3 (“, i+”):”)
p3 (i,0)
4a)
def p4(num):
if (num> 0):
p4(num-1)
print(num,” “)
else:
print(”fi? “)
4b)
def p4(num):
if (num> 0):
p4(num-1)
print(num,” “)
print(”fi? “)
Quina seria la sortida si executéssim p4(5)?
5)
def p5(num):
if (num>0):
print(num, end=" ")
num=num-1
p5(num)
print(num, end=" ")
Quina seria la sortida si executéssim p5(5)?
6)
def p6(num):
print(num, end=” “)
for i in range(num, 0, -1):
p6(i-1)
Quina seria la sortida si executéssim p6(4)?
7)
def f1(num):
if (num>0):
f= f1(num-1) + 1
else:
f=0
return f
Que retornaria f1(10)?
8)
def f2(num):
if (num>0):
f= f2(num-1) + num
else:
f=0
return f
ret=f2(10)
print(ret,end=" ")
Que retornaria f2(10)?
9)
def f3(num):
if (num>0):
r=num
for i in range(num-1, 0, -1):
r= r + f3(i)
f=r
else:
f=num
return f
Què retorna f3(6)?
Trobar el cas general (què fa la funció) i escriure-la d’una altra forma més senzilla
10)
def f4(x):
if (x> 100):
f=x-10
else:
f= f4(f4(x+11))
return f
}
Què retorna f4(100), i f4(0)? Fer el programa més senzill.
Recursivitat codi
0. Fes un meńu per escollir l'exercici a executar: el menú es trobarà en un fitxer diferent dels exercicis i aquests s'ubicaran en el mateix mòdul.
1. Escriure una funció recursiva que donat un número N (N ≥ 0) passat com a paràmetre calculi la suma de tots els números enters fins a N inclòs.
2. Escriure una funció recursiva que calculi el resultat de X elevat a N amb N >0, sabent que X0 = 1.
3. Escriu una funció recursiva per calcular la suma digital d’un número natural. Per exemple, la suma digital de 18624 és: 4 + 2 + 6 + 8 + 1 = 21
4. Dissenyeu un algoritme recursiu que calculi el màxim comú divisor de dos enters positius, sabent que :
MCD( X, Y) = MCD (X-Y, Y) SI X > Y MCD (X, Y-X) SI Y > X X SI X = Y
5. Fes la funció recursiva SumaHarmonica (n) que retorna la suma:
1 + 1/2 +1/3 + ... + 1/n
6. Fes una funció recursiva booleana que donats un número i un dígit retorni si aquest dígit pertany al número. Per exemple:
existeix(1234,3) → true existeix(1234,7) → false
7. Fes una funció que calculi el producte segons el mètode rus que diu que:
x*y = ((2*x) *(y/2)) SI y es parell x*y =((2*x) *(y/2))+ x SI y és senar. Quan y val 1, el resultat és x.
8. Torres de Hanoi (amb N introduïda per l’usuari com a paràmetre). S’ha d’anar visualitzant la solució per pantalla.
9. Fes una funció recursiva que ompli un tauler n-goro. Un tauler n-goro és una matriu de n files i n+1 columnes que s'omple consecutivament en diagonal i quan ens sortim per una banda entrem per l'altra. L'últim element que s'omple serà l'extrem inferior dret.
Per exemple amb n=3 1 10 7 4 5 2 11 8 9 6 3 12 Amb n = 4 1 17 13 9 5 6 2 18 14 10 11 7 3 19 15 16 12 8 4 20
10. Potencias
Ene ste ejercicio vamos a trabajar con las potencias. Debemos realizar una función en Python a la cual le pase dos parametros (x,y), uno de ellos es la base y el otro el exponente. La función me debe devolver el resultado de esa potencia.
#Sin recursividad
def potencia(base,exp):
if exp==0:
return 1
else:
r=base
for x in range (1,exp):
r=base*r
return r
print(potencia(2,5))
32
#Con recursividad
def potencia_r(base,exp):
if exp==0:
return 0
if exp==1:
return base
else:
return base * potencia_r(base,exp-1)
print(potencia_r(2,5))
32