Advertisement
Gianvy

Esercizi sulla ricorsione - Gianluca Mancusi

Mar 7th, 2017
312
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 3.61 KB | None | 0 0
  1. /*
  2. Esercizi sulla ricorsione:
  3. Esercizio 1:
  4. Calcolare la somma dei primi N numeri positivi
  5. Esercizio 2:
  6. Calcolare l’N-esimo numero di Fibonacci
  7. Esercizio 3:
  8. Calcolare il minimo di una sequenza di elementi
  9. Esercizio 4:
  10. Calcolare il prodotto di due numeri (utilizzando solo la somma)
  11. Esercizio 5:
  12. Calcolare il fattoriale di un numero N
  13. Esercizio 6:
  14. Calcolare la divisione di due numeri (utilizzando solo la sottrazione)
  15. Esercizio 7:
  16. Scrivere un programma che determini se una matrice quadrata N × N sia o meno simmetrica rispetto alla
  17. diagonale principale, restituendo un valore booleano di conferma.
  18. Esercizio 8:
  19. Dato un vettore di n numeri interi, scrivere una funzione ricorsiva C che ne scambi gli elementi fino a
  20. metterli in ordine inverso rispetto alla posizione iniziale (senza dichiarare vettori aggiuntivi).
  21. Esercizio 9:
  22. Data una stringa S di caratteri e un carattere c, scrivere una funzione ricorsiva C che calcoli le occorrenze di
  23. c in S.
  24. */
  25.  
  26. int sommannumeri(int n)
  27. {
  28.     if (n < 1) return 0;
  29.     else return n + sommannumeri(n - 1);
  30. }
  31.  
  32. int fibonacci(int n)
  33. {
  34.     if (n < 0) return 0;
  35.     if (n == 1 || n == 0) return n;
  36.     else return fibonacci(n - 1) + fibonacci(n - 2);
  37. }
  38.  
  39. int min(int a[], int i)
  40. {
  41.     if (i == 1) return a[i - 1];
  42.     int m = min(a, i - 1);
  43.     if (m < a[i - 1])
  44.         return m;
  45.     return a[i - 1];
  46. }
  47.  
  48. int ProdottoRicorsivo(int a, int b)
  49. {
  50.     if (b == 0){
  51.         return 0;
  52.     }
  53.     else{
  54.         if (a > 0){
  55.             if (b > 0){
  56.                 return a + ProdottoRicorsivo(a, b - 1);
  57.             }
  58.             else{
  59.                 return -a + ProdottoRicorsivo(a, b + 1);
  60.             }
  61.         }
  62.         else{
  63.             if (b > 0){
  64.                 return a + ProdottoRicorsivo(a, b - 1);
  65.             }
  66.             else{
  67.                 return -a + ProdottoRicorsivo(a, b + 1);
  68.             }
  69.         }
  70.     }
  71. }
  72.  
  73. int fattoriale(int n)
  74. {
  75.     if (n <= 1) return 1;
  76.     else return n*fattoriale(n - 1);
  77. }
  78.  
  79. int divisione(int a, int b)
  80. {
  81.     if (abs(a) < abs(b)){
  82.         return 0;
  83.     }
  84.     else{
  85.         if (a > 0){
  86.             if (b > 0){
  87.                 return 1 + divisione(a - b, b);
  88.             }
  89.             else{
  90.                 return -1 + divisione(a + b, b);
  91.             }
  92.         }
  93.         else
  94.         {
  95.             if (b > 0){
  96.                 return -1 + divisione(a + b, b);
  97.             }
  98.             else{
  99.                 return 1 + divisione(a - b, b);
  100.             }
  101.         }
  102.     }
  103. }
  104.  
  105. bool simmetrica(int *matr[], int r, int c)
  106. {
  107.     if (r == 0 && c == 0) return true;
  108.     if (r == c) return simmetrica(matr, r, c - 1);
  109.     if (c == -1) return simmetrica(matr, r - 1, r - 1);
  110.     else return matr[r][c] == matr[c][r] && simmetrica(matr, r, c - 1);
  111. }
  112.  
  113. void inverti(int *arr, int i, int j)
  114. {
  115.     if (i == j || i > j) return;
  116.     else {
  117.         int tmp = arr[i];
  118.         arr[i] = arr[j];
  119.         arr[j] = tmp;
  120.         return inverti(arr, i + 1, j - 1);
  121.     }
  122. }
  123.  
  124. int occorrenze(char str[], char c, int i)
  125. {
  126.     if (str[i] == 0) return 0;
  127.     return (str[i] == c) + occorrenze(str, c, i + 1);
  128. }
  129.  
  130. int main()
  131. {
  132.     int npos = sommannumeri(3);
  133.     int nneg = sommannumeri(-3);
  134.     int f = fibonacci(5);
  135.     int a[5] = { 24, 33, 15, 63, 0 };
  136.     int minimo = min(a, 5);
  137.     int prod = ProdottoRicorsivo(2, -3);
  138.     int fatt = fattoriale(5);
  139.     int div = divisione(18, 6);
  140.     int div2 = divisione(-18, 6);
  141.     int div3 = divisione(18, -6);
  142.     int div4 = divisione(-18, -6);
  143.     int** matr = malloc(4 * sizeof(int*));
  144.     for (int i = 0; i < 4; i++)
  145.     {
  146.         matr[i] = malloc(4 * sizeof(int));
  147.     }
  148.     matr[0][0] = 0; matr[0][1] = 1; matr[0][2] = 2; matr[0][3] = 3;
  149.     matr[1][0] = 1; matr[1][1] = 1; matr[1][2] = 2; matr[1][3] = 3;
  150.     matr[2][0] = 2; matr[2][1] = 2; matr[2][2] = 2; matr[2][3] = 3;
  151.     matr[3][0] = 3; matr[3][1] = 3; matr[3][2] = 3; matr[3][3] = 3;
  152.     bool ris = simmetrica(matr, 3, 3);
  153.     int arr[4] = { 1,2,3,4 };
  154.     inverti(arr, 0, 3);
  155.     char str[] = "Provo la funzione"; //3 occorrenze con 'o'
  156.     int ris2 = occorrenze(str, 'o', 0);
  157.     return 1;
  158. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement