Visualizzazione dei risultati da 1 a 5 su 5
  1. #1

    [C]Problema di inserimento

    Ciao,
    devo fare un programma che inserito un numero che faccia da limite scriva la sequenza di fibonacci fino a quel numero.
    Il problema è che dopo aver inserito il limite devo inserire un alto numero che faccia incominciare la funzione.
    Come mai?
    codice:
    #include<stdio.h>
    void fib(int,int,int,int);
    int main()
    {
        int k=0,i=1;
        printf("Inserisci l'ultimo elemento che vuoi vedere:\n");
        scanf("%d%", &k);
        fib(1,1,k,i);
        printf("\n");
        system("pause");
        return 0;
    }
    //Implementazione della funzione
    void fib(int penultimo, int ultimo, int lim, int prim) //lim è il limite 
    {
      int nuovo;
      if(prim==1)
      {
         printf("%d ",penultimo);
         printf("%d ",ultimo);
      }
      nuovo=penultimo+ultimo;
      prim++;
      if(nuovo<lim) 
      {
        printf("%d ", nuovo);
        fib(ultimo, nuovo, lim, prim);
      }
    }
    Ciao e grazie
    Your time is limited, so don't waste it living someone else's life. Stay hungry, stay foolish. (Steve Jobs)

  2. #2
    codice:
        scanf("%d%", &k);
    hai inserito un % di troppo.
    Amaro C++, il gusto pieno dell'undefined behavior.

  3. #3
    Grazie
    Your time is limited, so don't waste it living someone else's life. Stay hungry, stay foolish. (Steve Jobs)

  4. #4
    Utente di HTML.it L'avatar di Scara95
    Registrato dal
    Jul 2009
    residenza
    Zimella (VR)
    Messaggi
    2,590
    Un'ottimizzazione del tuo codice:
    • prim non serve, può essere generalizzata la funzione richiamandola con 0 e 1
    • basta un solo controllo all'inizio per controllare che l'ultimo numero non sia maggiore di lim
    • il richiamare come ultima funzione la funzione stessa da la possibilità al compilatore di ottimizzare la funzione in quanto può essere considerata tail-recursive
      (Si può obbiettare che lo standard C non definisce questo caso, ma ormai molti compilatori C lo implementano)

    codice:
    #include<stdio.h>
    void fib(int,int,int);
    int main()
    {
        int k=0;
        printf("Inserisci l'ultimo elemento che vuoi vedere:\n");
        scanf("%d", &k);
        fib(0,1,k);
        printf("\n");
        system("pause");
        return 0;
    }
    //Implementazione della funzione
    void fib(int penultimo, int ultimo, int lim) //lim è il limite 
    {
      if(ultimo > lim)
        return;
      printf("%d ", ultimo);
      fib(ultimo, ultimo+penultimo, lim);
    }
    "Quid enim est, quod contra vim sine vi fieri possit?" - Cicerone, Ad Familiares

  5. #5
    Ciao,
    Grazie per l'ottimizzazione del codice e per la spiegazione.
    Your time is limited, so don't waste it living someone else's life. Stay hungry, stay foolish. (Steve Jobs)

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 © 2024 vBulletin Solutions, Inc. All rights reserved.