RISOLTO problema in C

Pubblicità
Stato
Discussione chiusa ad ulteriori risposte.

sare1234

Utente Attivo
Messaggi
262
Reazioni
3
Punteggio
35
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);
}
 
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.
 
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);
}
 
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:
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.
Pubblicità
Pubblicità
Indietro
Top