RISOLTO problema in C

Stato
Discussione chiusa ad ulteriori risposte.

sare1234

Utente Attivo
262
3
Buonasera devo scrivere un programma: scrivi ricorsivamente la somma del numero 457 cioè 4+5+7 = 16, ho fatto così perchè non mi funziona?

C:
#include <stdio.h>

int sum(int n);

int main(int argc, const char * argv[]) {
    int n;
    
    printf("\nIntrodurre N:\t");
    scanf("%d",&n);
    
    printf("\nSomma di %d:\t%d\n", n, sum(n));
    
    return 0;
}

int sum(int n){
    if(n==0)
        return 0;
    else
        return sum(n-1);
}
 

DispatchCode

Moderatore
Staff Forum
Utente Èlite
2,223
1,854
CPU
Intel I9-10900KF 3.75GHz 10x 125W
Dissipatore
Gigabyte Aorus Waterforce X360 ARGB
Scheda Madre
Asus 1200 TUF Z590-Plus Gaming ATX DDR4
HDD
1TB NVMe PCI 3.0 x4, 1TB 7200rpm 64MB SATA3
RAM
DDR4 32GB 3600MHz CL18 ARGB
GPU
Nvidia RTX 3080 10GB DDR6
Audio
Integrata 7.1 HD audio
Monitor
LG 34GN850
PSU
Gigabyte P850PM
Case
Phanteks Enthoo Evolv X ARGB
Periferiche
MSI Vigor GK30, mouse Logitech
Net
FTTH Aruba, 1Gb (effettivi: ~950Mb / ~480Mb)
OS
Windows 10 64bit / OpenSUSE Tumbleweed
Scusa ma non può funzionare una cosa così... il codice che hai errato da un punto di vista logico.
In primis nel tuo caso non va perchè non stai sommando nulla, andrai sempre al caso base, ottenendo come risultato 0. Quello che stai facendo avrebbe quasi senso se aggiungessi nell'else n + sum(n-1);; in questo modo otterresti la somma dei numeri da 1 a n-1.

Ma il caso che presenti non è assolutamente questo. Tu hai un numero intero composto da N cifre che devi sommare per arrivare al risultato finale.
Non sei lontanissima dalla soluzione. Come ottieni le singole cifre del numero? Devi sommare queste. Per ogni passo, analogamente, dovrai "rimpicciolire" questo numero (dividendolo...).

Lascio a te la soluzione.
 
  • Mi piace
Reazioni: Andretti60

sare1234

Utente Attivo
262
3
Scusa ma non può funzionare una cosa così... il codice che hai errato da un punto di vista logico.
In primis nel tuo caso non va perchè non stai sommando nulla, andrai sempre al caso base, ottenendo come risultato 0. Quello che stai facendo avrebbe quasi senso se aggiungessi nell'else n + sum(n-1);; in questo modo otterresti la somma dei numeri da 1 a n-1.

Ma il caso che presenti non è assolutamente questo. Tu hai un numero intero composto da N cifre che devi sommare per arrivare al risultato finale.
Non sei lontanissima dalla soluzione. Come ottieni le singole cifre del numero? Devi sommare queste. Per ogni passo, analogamente, dovrai "rimpicciolire" questo numero (dividendolo...).

Lascio a te la soluzione.
si hai ragione ho fatto così ma mi stampa solo il primo numero che inserisco

C:
#include <stdio.h>

int sum(int n);

int main(int argc, const char * argv[]) {
    int n;
    
    printf("\nIntrodurre N:\t");
    scanf("%d",&n);
        
    printf("\nSomma di %d:\t%d\n", n, sum(n));
    
    return 0;
}

int sum(int n){
    if(n==0)
        return 0;
    else
        return n%10 + sum(n/10);
}
 

Ibernato

Utente Èlite
4,328
2,047
OS
Windows 10 Pro / Ubuntu 22.04
Vdo un pò OT, ma stai aprendo un sacco di thread su linguaggi diversi, Java, C ecc.
Ma che casino hai in testa? Secondo me devi ripassare un pò le basi, non del linguaggio, ma su come si ragiona per arrivare alla soluzione di un problema, soprattutto se stai studiando 2 linguaggi insieme e aggiungo, completamente diversi.

@sare1234 ti stampa un numero perchè tu chiami una volta la funzione.
Devi capire il numero da quante unità è composto e fare un ciclo per ottenere le singole unità e sommarle
 
Ultima modifica:

DispatchCode

Moderatore
Staff Forum
Utente Èlite
2,223
1,854
CPU
Intel I9-10900KF 3.75GHz 10x 125W
Dissipatore
Gigabyte Aorus Waterforce X360 ARGB
Scheda Madre
Asus 1200 TUF Z590-Plus Gaming ATX DDR4
HDD
1TB NVMe PCI 3.0 x4, 1TB 7200rpm 64MB SATA3
RAM
DDR4 32GB 3600MHz CL18 ARGB
GPU
Nvidia RTX 3080 10GB DDR6
Audio
Integrata 7.1 HD audio
Monitor
LG 34GN850
PSU
Gigabyte P850PM
Case
Phanteks Enthoo Evolv X ARGB
Periferiche
MSI Vigor GK30, mouse Logitech
Net
FTTH Aruba, 1Gb (effettivi: ~950Mb / ~480Mb)
OS
Windows 10 64bit / OpenSUSE Tumbleweed

Andretti60

Utente Èlite
6,440
5,091
Di fatto l’assegnamento non chiede nemmeno di leggere un numero da tastiera, ma solo calcolare il valore per un numero specifico ;)
 
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