Domanda

Ho una sequenza.

a1 = 1 - cos(x);
ai = a1 + (-1)^(i-1) * x^(2*i-2) / (2*i-2)!

Ho bisogno di scrivere questo con e senza ricorsione. Ma ha un diverso risultato.
Ecco il mio codice: http://codepaste.net/q213q6

È stato utile?

Soluzione

ho intenzione di operare in base al presupposto che si tratta di compiti a casa, se mi sbaglio tornerò e modificare questo post o ripubblicare.

In primo luogo, si dovrebbe provare a scrivere la funzione fattoriale in maniera ricorsiva di coda. Anche se probabilmente non farà molta differenza in C, è buona pratica.

int helper( int x, int acc ) {
    if( x == 0 ) {
        return acc;
    }
    else {
      return helper( x - 1, acc * x );
    }
}

int factorial( x ) {
  helper( x, 1 );
}

Quindi, non si vuole mettere in genere un ciclo interno delle funzioni ricorsive, che sconfigge un po 'il punto. Pensate a una chiamata ricorsiva come un'iterazione con un test e sia di ritorno o richiamo.

Altri suggerimenti

Dal momento che si sta eseguendo aritmetica in virgola mobile. Diversi modi di attuazione in grado di produrre risultati diversi. Nel tuo caso mi viene in mente un luogo in cui vengono sostenute le perdite

currC = pow(x, 2*i-2);

non è uguale a

  47:          currC = currC * x * x;

Per ulteriori informazioni, http://en.wikipedia.org/wiki/Floating_point#Multiplication

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top