Visualizzazione dei risultati da 1 a 5 su 5

Discussione: [C]Funzione ricorsiva

  1. #1

    [C]Funzione ricorsiva

    Ciao
    Ho un problema con un afunzione ricorsiva,essa dovrebbe calcolare tutti i numeri compresi tra 2 valori.
    Il codice sorgente è il seguente

    #include<stdio.h>
    #include<stdlib.h>
    int somma(int x,int y);
    main()
    {
    int x,y,som;
    do
    {
    printf("Inserisci il numero minore:");
    scanf("%d",&x);
    printf("Inserisci il numero maggiore:");
    scanf("%d",&y);
    }
    while(y<x);
    som=somma(x,y);
    printf("La somma dei numeri compresi tra %d e %d e' %d\n",x,y,som);
    system("pause");
    }
    int somma(int x,int y)
    {
    int som;
    som=0;
    if(x==y)
    {
    return x;
    }
    else
    {
    return som+somma(x+1,y);
    }
    }

    Vi ringrazio sin da ora per gli aiuti che potrete darmi
    Ciao
    $cipione

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480

    Re: [C]Funzione ricorsiva

    Originariamente inviato da $cipione

    Ho un problema ...
    E il problema qual è?
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    Utente di HTML.it
    Registrato dal
    Jun 2007
    Messaggi
    153
    il problema è nella funzione somma, in particolare la variabile sum non devi inizializzarla a 0 ma a x,quindi il codice diventa:

    Codice PHP:
    int somma(int x,int y)
    {
    int som=x;

    if(
    x!=y)
      return 
    som+somma(x+1,y);
    else
      return 
    x;

    cogli l'attimo

  4. #4
    Originariamente inviato da c_junior
    il problema è nella funzione somma, in particolare la variabile sum non devi inizializzarla a 0 ma a x,quindi il codice diventa:

    Codice PHP:
    int somma(int x,int y)
    {
    int som=x;

    if(
    x!=y)
      return 
    som+somma(x+1,y);
    else
      return 
    x;

    Però non ho capito i lperchè dell'inizializzazione ad x,se lo inizializavo a 0 non mi avrebbe dovuto restituire la somma senza il valore x aggiunto?
    Ciao
    $cipione

  5. #5
    Immagina un'esecuzione con 3 e 7... la sequenza di chiamate nel tuo programma iniziale è

    somma(3,7) =
    som + somma(4,7) = // som è uguale a 0
    som + somma(5,7) = // som è uguale a 0
    ...
    som (7,7) = 7

    mentre nella versione modificata diventa

    somma(3,7) =
    som + somma(4,7) = // som è uguale a 3
    3 + som + somma(5,7) = // som è uguale a 4
    ...
    3 + 4 + 5 + 6 + somma(7,7) =
    3 + 4 + 5 + 6 + 7

    capito?

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.