Pergunta

Então eu sou obrigado a calcular recursivamente e^x, utilizando uma forma fatorada de um desenvolvimento em série de Taylor:

equação:e^x = 1 +x + (x^2)/2!+ ...+ ((x^n)/n!))

forma fatorada:e^x = 1 + x (1+x/2*(1+x/3*(...(1+x/n))))

Na definição da função abaixo, 'x' é o poder e 'n' é o número total de termos para estimar o e^x.Eu iria preferir se alguém poderia me apontar na direção certa.Eu tentei muitas maneiras diferentes, incluindo o uso de uma base caso de o mais íntimo do prazo de fatorado equação, mas sem sucesso.

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;
    }


}

Eu percebi que o 'n' deve aumentar, não diminuir, como eu tenho tentado, no entanto, a chamada original para a função tem o número total de iterações na variável " n " e não há maneira de controlar o número total de iterações ao longo de todas as chamadas recursivas.

o valor de cada termo do divisor (1 +(x/n)), onde n é o divisor, deve aumentar um de cada vez, e no final da iteração ser igual ao número total de iterações.

Foi útil?

Solução

Uma vez que o método é estático, você pode, na verdade, apenas armazená-lo em uma variável estática na primeira chamada.Você vai precisar para lançar uma instrução if para verificar se é a primeira iteração também.Vou adicionar o código mais tarde, mas não tenho tempo agora.

Ou você pode manter o controle do número de iterações em uma variável.Delegar para outro método, que é o "real" método recursivo, e passar argumentos diferentes.

Todos os tipos de diferentes soluções possíveis.

Você pode transformá-lo em um loop, mas que seria, possivelmente, não se impressionar com o seu supervisor.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top