Estou com um problema em recursiva.
Estou tentando fazer este exercício S = (n/2) + ((n-1)/4) - ((n-2)/2) + ((n-3)/4)…+ ou -(1/(2 ou 4)), porém sempre quando eu faço, o valor sai errado porque na recursiva ele acaba fazendo a conta da direita para a esquerda.
Como eu posso fazer ele ficar da esquerda para direita, ou numa maneira que saia o mesmo resultado?
Por exemplo:
n = 4
S = (4/2) + ((4-1)/4) - ((4-2)/2) + ((4-3)/4) [color=red]=>[/color] S = (4/2) + (3/4) - (2/2) + (1/4) [color=red]=>[/color] S = (2) + (0.75) - (1) + (0.25) [color=red]=>[/color] S = 2.75 - 1 + 0.25 [color=red]=>[/color] S = 1.75 + 0.25 [color=red]=>[/color] S = 2
Com a recursiva ele faz o cálculo assim:
n = 4
S = (4/2) +
S = (3/4) -
S = (2/2) +
S = (1/4)
S = 2 +
S = 0.75 -
S = 1 +
S = 0.25
S = 2 +
S = 0.75 -
S = 1 + 0.25 = 1.25
S = 2 +
S = 0.75 - 1.25 = -0.5
S = 2 - 0.5 = 1.5
Esse é o problema ele faz a conta da Direta para a esquerda.
Meu código é:
[code]import javax.swing.JOptionPane;
public class EXFat03 {
public static void main (String args[]){
double n;
int z = 0;
n = Double.parseDouble(JOptionPane.showInputDialog("Colocar o valor de n"));
System.out.println("O resultado é " +sfat(n,z));
}
public static double sfat(double num, int z){
double s = 0;
if (num == 1){
if ( z == 0){
return (num/2);
}
else if ( z == 1 ){
return (num/4);
}
}
else {
if (z == 0){
s = (num/2) + (sfat(num -1, z +1));
}
else if (z == 1){
s = (num/4) - (sfat(num -1, z -1));
}
}
return s;
}[/code]
Podem me ajudar?
Tem que ser em recursiva esse exercício.
Obs: Eu usei o 4 como exemplo, mas se eu colocar outros valores ele pode as vezes bater e as vezes não.