Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - Esercizio con ricorsione
Forum - C/C++ - Esercizio con ricorsione

Avatar
spaghetto (Normal User)
Newbie


Messaggi: 4
Iscritto: 18/12/2007

Segnala al moderatore
Postato alle 15:59
Martedì, 18/12/2007
Salve ragazzi, è la prima volta che vi scrivo, e ho deciso di rompervi un pò perchè non riesco a svolgere nella maniera corretta un esercizio con la ricorsione...

Quello che devo fare è questo...

Dato in input un valore positivo n, devo devo scrivere una funzione che mi restituisce il valore delle partizioni...per partizioni intendo quel gruppo di numeri che se sommati mi da n stesso...

per esempio se dò input 4, come output avrò 5, poichè 4 si ricava da questi numeri:

1 1 1 1

1 1 2

1 3

2 2

4

Da notare inoltre che ogni numero non può essere inferiore al precedente e maggiore di n...

spero di essermi spiegato!

Sono riuscito a risolverlo questo esercizio, ma nella maniera sbagliata, ovvero utilizzando sì la ricorsione ma anche con una funzione di supporto...

ecco il codice del mio esercizio...ve lo lascio ma tanto è alquanto inutile...!!!

Codice sorgente - presumibilmente C++

  1. #include<stdio.h>
  2. void verifica(int a[],int n,int m, int *i);       // Prototipi di funzione
  3. int funz(int a[],int n,int m,int i,int cont);
  4. int main() {
  5.   int ris;
  6.   int n,x,y,somma=0;
  7.   scanf("%d",&n);                                 // Prendo la dimensione di n
  8.   for(x=n;x>0;x--) {                              // Passo con più cicli i vari vettori creati con la dimensione n
  9.   int a[x];
  10.   for(y=0;y<x;y++) a[y]=1;
  11.   ris=funz(a,x,n,1,0);
  12.   somma=somma+ris;
  13. }
  14. printf("%d\n",somma);
  15. return 0;
  16. }
  17. int funz(int a[],int n,int m,int i,int cont) {                // Funzione ricorsiva
  18.   int somma,x,y;
  19.   somma=0;
  20.   for(x=0;x<n;x++) somma=somma+a[x];                          // Verifico se la somma da il valore n, qui chiamato con la variabile m
  21.   if(somma==m) cont++;
  22.   for(x=0;x<n;x++) if(a[x]!=m) break;
  23.   if(x==n) return cont;                                       // Se arrivo alla fine ritorno il valore cont
  24.   verifica(a,n,m,&i);
  25.   return funz(a,n,m,i,cont);
  26. }
  27. void verifica(int a[],int n, int m,int *i) {                  // Funzione non ricorsiva che mi permette di poter correggere e di poter sistemare il vettore man mano che crescono gli elementi
  28.   int x,y;
  29.   *i=*i+1;
  30.   a[n-1]=*i;
  31.   if(a[n-1]>m) {
  32.     for(x=n-1;x>0;x--)  {
  33.       if(a[x]>m) {
  34.         a[x]=1;
  35.         a[x-1]=a[x-1]+1;
  36.     }
  37.   }
  38.     for(y=n-1;y>0;y--){
  39.     for(x=n-1;x>0;x--) {
  40.       if(a[x]<a[x-1]) a[x]=a[x-1];
  41. }}
  42. }
  43. return;
  44. }




Il mio intento sarebbe riuscire a svolgerlo in una maniera più semplice, il problema è che non sono in grado !!!

Vi ringrazio in anticipo per le eventuali risposte!
Grazie Mille!!!:d

Ultima modifica effettuata da spaghetto il 18/12/2007 alle 16:08
PM Quote