Quadrato del precedente o successivo con ricorsione C++

Realizzare un’applicazione Quadrati come segue. L’applicazione contiene una funzione ricorsiva quadratoPrecSucc che verifica, all’interno di un vettore di interi ricevuto come parametro, se esiste un elemento che sia il quadrato dell’elemento precedente o successivo. La funzione torna un booleano 1/vero o 0/falso.

Es. [7, 4, 2, -3] torna vero 4 è il quadrato del successivo 2

Es. [-3, 9, 2, 3] torna vero con 9 quadrato del precedente -3

Es. [7, 5, 12, 4] torna 0

Una possibile implementazione di soluzione è la seguente. Non tiene conto dell’inserimento in input del vettore ma banalmente lo inizializza su misura. Al lettore l’esercizio di renderlo più dinamico. La funzione ricorsiva si annida ad oltranza nel vettore, anche se trova un quadrato. E’ possibile modificare il codice per farlo arrestare prima forzando il ritorno.

#include <iostream>
using namespace std;

#define DIM 4

bool quadratoPrecSucc(int vettore[], int indice)
{
  bool risultato = false;

  if (indice < DIM)
  {
    //controllo a sinistra
    if (indice > 0)
    {
      if (vettore[indice-1]*vettore[indice-1] ==
          vettore[indice] )  
        risultato = true;
    }  
  
    //controllo a destra
    if (indice < DIM -1)
    {
      if (vettore[indice+1]*vettore[indice+1] ==
          vettore[indice] )      
        risultato = true;
    }
  
    indice++;    
    risultato = quadratoPrecSucc(vettore, indice);
  }  

  return risultato;
}

int main() 
{
  int vettore[DIM] = {7,4,5,-3};

  if (quadratoPrecSucc(vettore, 0) == true)
    cout << "trovato almeno un quadrato " << endl;
  else
   cout << "nessun quadrato trovato " << endl;   
  
  return 0;
}

Ultima modifica 2 Settembre 2022