Olá, caros colegas.
Gostaria de tirar uma dúvida, estou tentando montar uma recursiva dessa sequência.
Agradeço a quem puder ajudar.
S = 1/n + 2/n-1 + 3/n-2 + … + n-1/2 + n/1
Até tentei algo, mas realmente não sei onde estou errando.
import java.util.*;
public class Exemplo {
/**
* @param args
*/
static double num;
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner dd = new Scanner(System.in);
System.out.println("Digite um número");
num = dd.nextDouble();
System.out.println("");
System.out.println("Resultado = " + recEx(num));
}
public static double recEx(double n){
double s=0.0, sx = 0.0;
if ((int)n>=1){
sx = (n-1)/((n-1) -((n-1)-1)) + (n-1)-n/(n-1);
s = s + sx;
recEx(sx);
}
return s;
}
}
luxu
#2
Exemplo tah na linguagem pascal, mas v se clareia as ideias
[code]Function Fib(n:integer):Integer;
Begin
If (n=1) or (n=0)
then Fib:=1
else Fib:=Fib(n-2) + Fib(n-1);
End;
var n:integer;
Begin
clrscr;
write(‘Digite o FIBONACCI desejado:’);readln(n);
writeln(Fib(n));
readkey;
End.[/code]
dobau
#3
Isso ajuda ?
[code] public static double recEx(double a, double b) {
if (b <= 1) {
return a;
} else {
return a/b + recEx(a + 1, b - 1);
}
}
public static double recEx(double n){
return recEx(1, n);
}[/code]
Olá,
tenta assim, acho que funciona:
public double recEx(double inc, double n, double sum) {
if(dec == 1) return sum;
sum += ++inc / n--;
System.out.println(sum + " += " + inc + " / " + n);
return recEx(inc, n, sum);
}
Olha a saída:
recEx(0, 10, 0);
0.1 += 1.0 / 9.0
0.3222222222222222 += 2.0 / 8.0
0.6972222222222222 += 3.0 / 7.0
1.2686507936507936 += 4.0 / 6.0
2.101984126984127 += 5.0 / 5.0
3.3019841269841272 += 6.0 / 4.0
5.051984126984127 += 7.0 / 3.0
7.718650793650793 += 8.0 / 2.0
12.218650793650793 += 9.0 / 1.0
12.218650793650793
[quote=juno.rr]Olá,
tenta assim, acho que funciona:
public double recEx(double inc, double n, double sum) {
if(dec == 1) return sum;
sum += ++inc / n--;
System.out.println(sum + " += " + inc + " / " + n);
return recEx(inc, n, sum);
}
Olha a saída:
recEx(0, 10, 0);
0.1 += 1.0 / 9.0
0.3222222222222222 += 2.0 / 8.0
0.6972222222222222 += 3.0 / 7.0
1.2686507936507936 += 4.0 / 6.0
2.101984126984127 += 5.0 / 5.0
3.3019841269841272 += 6.0 / 4.0
5.051984126984127 += 7.0 / 3.0
7.718650793650793 += 8.0 / 2.0
12.218650793650793 += 9.0 / 1.0
12.218650793650793
[/quote]
[quote=Armando Pereira][quote=juno.rr]Olá,
tenta assim, acho que funciona:
public double recEx(double inc, double n, double sum) {
if(dec == 1) return sum;
sum += ++inc / n--;
System.out.println(sum + " += " + inc + " / " + n);
return recEx(inc, n, sum);
}
Olha a saída:
recEx(0, 10, 0);
0.1 += 1.0 / 9.0
0.3222222222222222 += 2.0 / 8.0
0.6972222222222222 += 3.0 / 7.0
1.2686507936507936 += 4.0 / 6.0
2.101984126984127 += 5.0 / 5.0
3.3019841269841272 += 6.0 / 4.0
5.051984126984127 += 7.0 / 3.0
7.718650793650793 += 8.0 / 2.0
12.218650793650793 += 9.0 / 1.0
12.218650793650793
[/quote]
import java.util.*;
public class Exemplo {
/**
* @param args
*/
static double num;
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner dd = new Scanner(System.in);
System.out.println("Digite um número");
num = dd.nextDouble();
System.out.println("\n");
System.out.println("Resultado = " + recEx(0.0,num,0.0));
}
public static double recEx(double inc,double n,double sum){
if (n == 0) return sum;
sum += ++inc / n--;
System.out.println(sum + " += " + inc + " / " + n);
return recEx(inc, n, sum);
}
}
Está é uma saida.
Digite um número
2
0.5 += 1.0 / 1.0
2.5 += 2.0 / 0.0
Resultado = 2.5
:thumbup: Valeu mesmo !!!
Opa, “my bad”.
Onde está “dec” era pra ser “n” mesmo.
as variáveis “inc” e “sum”, recebem sempre 0 na primeira chamada.
Valeu.