RISOLTO [c] Funzione Ricorsiva Che Somma Due Array

Stato
Discussione chiusa ad ulteriori risposte.

Daniela Alberghni

Nuovo Utente
4
1
Salve devo creare un function ricorsiva che somma 2 array e mette i risultati nel primo array ecco il codice la parte commentata e come dovrebbe venire se uso un for....
C:
int Calcolo_31esimo_giorno(int resoconto[31][11],int oggi[10],int n){
int i;
for(i=0;i<10;i++){
    resoconto[31][i+1]=resoconto[31][i+1]+oggi[I];
    oggi[I]=0;}
if(n==0)
    return resoconto[31][n]=resoconto[31][n]+oggi[n];
else return Calcolo_31esimo_giorno(resoconto,oggi,n-1);
return resoconto;
}
so che sbaglio l'autoattivazione qualcuno mi può dare un manoo?
 
Ultima modifica da un moderatore:

rodhellas

Utente Èlite
1,522
427
CPU
Ryzen 5 3600
Dissipatore
GELID Phantom
Scheda Madre
MSI B450 Gaming Plus Max
HDD
500GB m.2 + 2TB HDD
RAM
16GB Corsair LPX 3000mhz
GPU
Gigabyte GTX 960 OC
Audio
Integrata
Monitor
SyncMaster 223BW
PSU
Antec HCG-520M
Case
Meshify C
Net
Gigabit Fastweb
OS
Windows 10 64bit
Nel main avrai:
Codice:
resoconto[31][N-1] = Calcolo_31_esimo_giorno(resoconto, oggi, N-1);  // con N = grandezza array
Nella funzione, il caso base sarà:
Codice:
 if ( n != 0 )      // o n > 0
  resoconto[31][n-1] = Calcolo_31_esimo_giorno(resoconto, oggi, N-1);

return resoconto[31][n]=resoconto[31][n]+oggi[n];
Ovvero, continui a richiamare la funzione finchè la condizione è rispettata, quando questa non lo è più, significa che sei arrivata al primo elemento dell'array e ritornerai la somma.
 

rodhellas

Utente Èlite
1,522
427
CPU
Ryzen 5 3600
Dissipatore
GELID Phantom
Scheda Madre
MSI B450 Gaming Plus Max
HDD
500GB m.2 + 2TB HDD
RAM
16GB Corsair LPX 3000mhz
GPU
Gigabyte GTX 960 OC
Audio
Integrata
Monitor
SyncMaster 223BW
PSU
Antec HCG-520M
Case
Meshify C
Net
Gigabit Fastweb
OS
Windows 10 64bit
Nel tuo codice, ritorni solo il primo valore ( da quello che vedo )
 

Daniela Alberghni

Nuovo Utente
4
1
Ciao ho inserito quello che mi hai detto tu ma continuo ad avere errori..
Questa è la function dove inserisco la chiamata alla function ricorsiva
Codice:
void Visualizza_Resoconto(int resoconto[31][11],int oggi[10]){
int i,j;
int n=11;
resoconto[31][n-1]=Calcolo_31_esimo_giorno(resoconto,oggi,n-1);
printf("PRODOTTI  : #0  #1  #2  #3  #4  #5  #6  #7  #8  #9\n");

        for(i=0;i<31;i++)
        {
        printf("\nGIORNO #%2d: ",resoconto[i][0]);
        for(j=1;j<11;j++){
        printf("%2d  ",resoconto[i+1][j]);
        }

}
printf("\n\n");}

invece questa è la function ricorsiva

Codice:
int Calcolo_31esimo_giorno(int resoconto[31][11],int oggi[10],int n){

if(n>0){
resoconto[31][n-1] = Calcolo_31_esimo_giorno(resoconto, oggi, n-1);}

else return resoconto[31][n]=resoconto[31][n]+oggi[n];

}
 

rodhellas

Utente Èlite
1,522
427
CPU
Ryzen 5 3600
Dissipatore
GELID Phantom
Scheda Madre
MSI B450 Gaming Plus Max
HDD
500GB m.2 + 2TB HDD
RAM
16GB Corsair LPX 3000mhz
GPU
Gigabyte GTX 960 OC
Audio
Integrata
Monitor
SyncMaster 223BW
PSU
Antec HCG-520M
Case
Meshify C
Net
Gigabit Fastweb
OS
Windows 10 64bit
Stato
Discussione chiusa ad ulteriori risposte.

Ci sono discussioni simili a riguardo, dai un'occhiata!

Entra

oppure Accedi utilizzando
Discord Ufficiale Entra ora!

Discussioni Simili