Diferència entre revisions de la pàgina «ASIX-M3-UF2-A3.1-Exercicis recursivitat»

De wikiserver
Dreceres ràpides: navegació, cerca
 
(25 revisions intermèdies per 2 usuaris que no es mostren)
Línia 4: Línia 4:
  
 
1a)
 
1a)
<source lang="java">
+
<source lang="python">
void p1( int a ) {
+
def p1(num):
   if (a>0) {
+
   if (num>0):
       System.out.print(a+” “);
+
       print(num,” “)
       p1(a-1);
+
       p1(num-1)
  }
+
   else:
   else {
+
       print(“final”)
       system.out.print(“final”)
 
  }
 
}
 
 
</source>
 
</source>
 
1b)
 
1b)
<source lang="java">
+
<source lang="python">
void p1( int a ) {
+
def p1(num):
   if (a>0) {
+
   if (num>0):
     System.out.print(a+” “);
+
     print(num,” “)
     p1(a-1);
+
     p1(num-1)
  }
+
   else:
   else {
+
     print(“final”)
     System.out.print(“final”)
+
   print(num,” “)
   }
+
   print(”final de veritat “)
  System.out.print(a+” “);
 
   System.out.print(”final de veritat “);
 
}
 
 
</source>
 
</source>
  
Línia 34: Línia 28:
  
 
2a)
 
2a)
<source lang="java">
+
<source lang="python">
void p2( int a , int b) {
+
def p2(num1 , num2):
   if (a%b!=0) {
+
   if (num1%num2!=0):
       System.out.print(a+” “);
+
       print(num1,” “)
       p2(a+1,b);
+
       p2(num1+1,num2)
  }
+
   else:
   else {
+
       print(“final”)
       System.out.print(“final”);
 
  }
 
}
 
 
</source>
 
</source>
 
2b)
 
2b)
<source lang="java">
+
<source lang="python">
void p2( int a , int b) {
+
def p2(num1 , num2):
   if (a%b!=0) {
+
   if (num1%num2!=0):
       System.out.print(a+” “);
+
       print(num1,” “)
       p2(a+1,b);
+
       p2(num1+1,num2)
   }
+
   print(“final”)
  System.out.print(“final”);
 
}
 
 
</source>
 
</source>
  
Línia 59: Línia 48:
  
 
3)
 
3)
<source lang="java">
+
<source lang="python">
void p3(int a, int b ){
+
def p3(num1, num2):
   if (a > 0){
+
   if (num1 > 0):
       p3(a-1,b+a);
+
       p3(num1-1,num2+num1)
  }
+
   else:
   else
+
       print(num2,” “)
  {
 
       System.out.print(b+” “);
 
  }
 
}
 
 
</source>
 
</source>
  
Línia 74: Línia 59:
  
 
Quina seria la sortida si eliminéssim el '''else''' ( fent sempre el print ) i des del programa principal féssim:
 
Quina seria la sortida si eliminéssim el '''else''' ( fent sempre el print ) i des del programa principal féssim:
<source lang="java">
+
<source lang="python">
for (int i=1;i<=5;i++){
+
for i in range(1,6):
   System.out.print (“p3 (“+ i+”):”);
+
   print (“p3 (“, i+”):”)
   p3 (i,0);
+
   p3 (i,0)
}
 
 
</source>
 
</source>
  
 
4a)
 
4a)
<source lang="java">
+
<source lang="python">
void p4 ( int a) {
+
def p4(num):
   if (a> 0) {
+
   if (num> 0):
       p4(a-1);
+
       p4(num-1)
       System.out.print(a+” “);
+
       print(num,” “)
  }
+
   else:
   else {
+
       print(”fi? “)
       System.out.print(”fi? “);
 
  }
 
}
 
 
</source>
 
</source>
 
4b)
 
4b)
<source lang="java">
+
<source lang="python">
void p4 ( int a) {
+
def p4(num):
   if (a> 0) {
+
   if (num> 0):
       p4(a-1);
+
       p4(num-1)
       System.out.print(a+” “);
+
       print(num,” “)
   }
+
   print(”fi? “)
  System.out.print(”fi? “);
 
}
 
 
</source>
 
</source>
  
Línia 107: Línia 86:
  
 
5)
 
5)
<source lang="java">
+
<source lang="python">
void p5( int a ) {
+
def p5(num):
   if (a>0 {
+
   if (num>0):
       System.out.print(a+” “);
+
       print(num, end=" ")
       a=a-1;
+
       num=num-1
       p5(a);
+
       p5(num)
  }
+
   print(num, end=" ")
   System.out.print(a+” “);
 
}
 
 
</source>
 
</source>
  
Línia 121: Línia 98:
  
 
6)
 
6)
<source lang="java">
+
<source lang="python">
void p6(int a ){
+
def p6(num):
   System.out.print(a+” “);
+
   print(num, end=” “)
   for ( int i =a; i>0;i--){
+
   for i in range(num, 0, -1):
       p6(i-1);
+
       p6(i-1)
  }
 
}
 
 
</source>
 
</source>
  
Línia 133: Línia 108:
  
 
7)
 
7)
<source lang="java">
+
<source lang="python">
int f1 ( int a ) {
+
def f1(num):
  int f;
+
   if (num>0):
   if ( a>0) f= f1(a-1) + 1;
+
      f= f1(num-1) + 1
   else f=0;
+
   else:
   return f;
+
      f=0
}
+
   return f
 
</source>
 
</source>
  
 
Que retornaria '''f1(10''')?
 
Que retornaria '''f1(10''')?
  
8 )
+
8)
<source lang="java">
+
<source lang="python">
int f2 ( int a ) {
+
def f2(num):
  int f;
+
    if (num>0):
  if ( a>0) f= f2(a-1) + a;
+
      f= f2(num-1) + num
  else f=0;
+
    else:
  return f;
+
      f=0
}
+
    return f
 +
ret=f2(10)
 +
print(ret,end=" ")
 
</source>
 
</source>
  
Línia 157: Línia 134:
  
 
9)
 
9)
<source lang="java">
+
<source lang="python">
int f3 ( int a ) {
+
def f3(num):
  int r,i,f;
+
   if (num>0):
   if (a>0) {
+
       r=num
       r=a;
+
       for i in range(num-1, 0, -1):
       for ( i= a-1;i>0;i--){
+
         r= r + f3(i)
         r= r + f3(i);
+
       f=r
      }
+
   else:
       f=r;
+
      f=num
   }
+
   return f
  else f=a;
 
   return f;
 
}
 
 
</source>
 
</source>
  
Línia 177: Línia 151:
  
 
10)
 
10)
<source lang="java">
+
<source lang="python">
int f4( int x ){
+
def f4(x):
  int f;
+
   if (x> 100):
   if (x> 100) f=x-10;
+
      f=x-10
   else f= f4(f4(x+11));
+
   else:
   return f;
+
      f= f4(f4(x+11))
 +
   return f
 
}
 
}
 
</source>
 
</source>
Línia 190: Línia 165:
 
==Recursivitat codi==
 
==Recursivitat codi==
  
1. Torres de Hanoi (amb N introduïda per l’usuari com a paràmetre). S’ha d’anar visualitzant la solució per pantalla.
+
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.
  
2. 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.
+
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.
  
3. Escriure una funció recursiva que calculi el resultat de X elevat a N amb N >0, sabent que X0 = 1.
+
2. Escriure una funció recursiva que calculi el resultat de X elevat a N amb N >0, sabent que X0 = 1.
  
4. 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
+
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
  
5. Dissenyeu un algoritme recursiu que calculi el màxim comú divisor de dos enters positius, sabent que :
+
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 204: Línia 179:
 
     X SI X = Y
 
     X SI X = Y
 
</pre>
 
</pre>
6. Fes la funció recursiva '''float SumaHarmonica''' ( int n ) que retorna la suma :
+
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>
7. Fes una funció recursiva que vaig imprimint la descomposició factorial d’un número enter.
 
  
8. 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
+
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>
  
9. Fes una funció que calculi el producte segons el mètode rus que diu que:
+
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 220: Línia 198:
 
</pre>
 
</pre>
  
10. 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.
+
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 235: Línia 215:
 
       16 12 8 4 20
 
       16 12 8 4 20
 
</pre>
 
</pre>
<!--
 
Soluciones
 
  
https://foro.elhacker.net/ejercicios/ejercicios_recursivos_en_java_y_sus_soluciones-t231013.0.html
+
 
-->
+
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