ITAsimo456

es30

Mar 30th, 2020
201
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.12 KB | None | 0 0
  1. Il Massimo Comune Divisore tra due numeri x e y, secondo l'algoritmo di Eulero si puo' definire ricorsivamente nel seguente modo:
  2.  
  3. Se y e' 0 allora il MCD e' x.
  4. Altrimenti, il MCD tra x e y e' uguale al MCD tra y e il resto della divisione x / y.
  5.  
  6.  
  7.  
  8.  
  9. Scrivere una funzione ricorsiva che stampa gli elementi di una fetta di array che inizia all'indice inizio e finisce all'indice fine.
  10.  
  11.  
  12.  
  13.  
  14. Scrivere una funzione che restituisce la somma, calcolata in modo ricorsivo, degli elementi di una fetta di array di interi che inizia all'indice inizio e finisce all'indice fine.
  15.  
  16.  
  17.  
  18. Ricerca dicotomica ricorsiva.
  19. Scrivere una funzione che restituisca l'indice di dove trova un occorrenza di un numero n all'interno di una fetta di array che inizia all'indice inizio e finisce all'indice fine, eseguendo una ricerca dicotomica ricorsivamente.
  20.  
  21.  
  22.  
  23.  
  24.  
  25.  
  26.  
  27.  
  28.  
  29.  
  30.  
  31.  
  32.  
  33.  
  34.  
  35.  
  36.  
  37.  
  38.  
  39.  
  40.  
  41. void stampa_array(char arr[], int inizio, int fine) {
  42. if (inizio <= fine) {
  43. std::cout << arr[inizio];
  44. if(inizio < fine)
  45. stampa_array(arr, inizio + 1, fine);
  46. }
  47. }
  48.  
  49. int main() {
  50. char arr[] = "Francesco Balestrazzi";
  51. stampa_array(arr, 10, 14);
  52. }
  53.  
  54.  
  55.  
  56.  
  57.  
  58.  
  59. Intuitivamente:
  60.  
  61. Per trovare un numero all'interno di una fetta di array:
  62. Se la fetta in cui stiamo cercando ha lunghezza 0, allora non lo abbiamo trovato.
  63. Altrimenti,
  64. Calcoliamo la meta' dell'array;
  65. Se il numero che cerchiamo e' piu' piccolo dell'elemento a meta', lo proviamo a cercare nella fetta di array a sinistra.
  66. Altrimenti, se il numero e' piu' piccolo lo proviamo a cercare nella fetta di array a destra.
  67. Se il numero che cerchiamo, invece, e' uguale all'elemento al centro, allora lo abbiamo trovato al centro della fetta.
  68.  
  69.  
  70.  
  71. es: cerco 6 all'interno di {1, 4, 5, 6, 7, 9} (fetta tra 0 e 5)
  72. la meta' e 2.
  73. il mio numero e' piu grande di 5, allora cerco nella fetta a destra (tra 3 e 5).
  74.  
  75. cerco 6 all'interno di {6, 7, 9} (fetta tra 3 e 5).
  76. la meta' e' 4.
  77. il mio numero e' piu' piccolo di 7, allora cerco nella fetta a sinistra (tra 3 e 3).
  78.  
  79. cerco 6 all'interno di {6} (fetta tra 3 e 3).
  80. la meta' e' 3.
  81. il mio numero e' uguale a 6, allora lo ho trovato alla posizione 3.
  82.  
  83.  
  84.  
  85.  
  86. es: cerco 3 all'interno di {1, 4, 5, 6, 7, 9} (fetta tra 0 e 5)
  87. la meta' e 2.
  88. il mio numero e' piu grande di 5, allora cerco nella fetta a sinistra (tra 0 e 1).
  89.  
  90. cerco 3 all'interno di {1, 4, 5} (fetta tra 0 e 1).
  91. la meta' e' 0.
  92. il mio numero e' piu' grande di 1, allora cerco nella fetta a destra (tra 1 e 1).
  93.  
  94. cerco 3 all'interno di {5} (fetta tra 1 e 1).
  95. la meta' e' 1.
  96. il mio numero e' piu' piccolo di 5, allora cerco nella fetta a sinistra (tra 1 e 0).
  97.  
  98. cerco 3 all'interno di {} (fetta tra 1 e 0).
  99. la fetta non ha elementi.
  100. non ho trovato il numero.
  101.  
  102.  
  103.  
  104.  
  105.  
  106.  
  107.  
  108. int ricerca_dicotomica(int pagliaio[], int ago, int inizio, int fine) {
  109. if(inizio <= fine) {
  110. int centro = (inizio + fine) / 2;
  111.  
  112. if( pagliaio[centro] < ago )
  113. return ricerca_dicotomica(pagliaio, ago, centro + 1, fine);
  114. else if ( pagliaio[centro] > ago )
  115. return ricerca_dicotomica(pagliaio, ago, inizio, centro - 1);
  116. else
  117. return centro;
  118. }
  119.  
  120. return -1;
  121. }
Advertisement
Add Comment
Please, Sign In to add comment