sequenza con e senza ricorsione
-
19-09-2019 - |
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
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