Domanda

Quindi sono tenuto a calcolare ricorsivamente E ^ X utilizzando una forma di formato di una serie Taylor:

Equazione: e ^ x= 1 + x + (x ^ 2) / 2! + ... + ((X ^ N) / N!))

Modulo fattorizzato: e ^ x= 1 + x (1 + x / 2 * (1 + x / 3 * (... (1 + x / n))))

Nella definizione della funzione di seguito, 'x' è la potenza e 'n' è il numero totale di termini per stimare e ^ x. Preferirei se qualcuno potesse indicarmi nella giusta direzione. Ho provato molti modi diversi, incluso l'utilizzo di un caso base del termine più interno dell'equazione fattorizzata, ma senza alcun risultato.

static double eThree(double x, long n) {
   //this is what i tried
   if(n==0){
        return 1 +x/n;
    }else{
        double a= (1+(x/n)) * (eThree(x,n-1));
        System.out.println(a);
        return a;
    }


}
.

Ho capito che "n 'dovrebbe aumentare di non diminuire come ho tentato, tuttavia, la chiamata originale alla funzione ha il numero totale di iterazioni in variabile' n 'e non c'è modo di tenere traccia del numero totale di iterazioni in tutte le chiamate ricorsive.

Il valore del divisore di ciascun termine in (1 + (x / n)), dove n è il divisore, dovrebbe aumentare di uno ogni volta, e nell'iterazione finale essere uguale al numero totale di iterazioni.

È stato utile?

Soluzione

Poiché il metodo è statico, puoi effettivamente conservarlo in una variabile statica nella prima chiamata.Avrai bisogno di lanciare una dichiarazione se per verificare se è anche la prima iterazione.Aggiungerò il codice più tardi ma non ho tempo in questo momento.

o puoi tenere traccia del numero di iterazioni in una variabile.Delegare a un altro metodo che è il metodo ricorsivo "reale" e passano diversi argomenti.

Tutti i tipi di diverse soluzioni possibili.

Potresti trasformarlo in un ciclo, ma non potrebbe impressionare il tuo supervisore.

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