Questão 3
Os números de Fibonacci formam uma sequência em que cada número é igual à soma dos dois anteriores. Os dois primeiros números são, por definição igual a 1, segundo o exemplo abaixo:
Ex: 1 1 2 3 5 8 13 …
Escreva um programa que carregue um úmero inteiro pelo teclado e indique se ele faz parte da sequência de Fibonacci.
Não estou conseguindo fazer isso ainda, alguém poderia me ajudar???
package lista02;
import java.util.Scanner;
public class Ex3Fibonacci {
private int entrada() {
System.out.println("Digite um número para o cálculo de finonacci");
int valor = new Scanner(System.in).nextInt();
return valor;
}
private int calcularFibonacci(int val) {
if (val <= 2)
return 1;
else
return calcularFibonacci(val - 1) + calcularFibonacci(val - 2);
}
private void imprimirCalculo(int val) {
int n = 0;
for (int i = 1; i < val; i++) {
n = calcularFibonacci(i);
System.out.println(n);
}
}
public static void main(String[] args) {
Ex3Fibonacci obj = new Ex3Fibonacci();
int calculo = obj.entrada();
obj.calcularFibonacci(calculo);
obj.imprimirCalculo(calculo);
}
}
Programação copy & paste não funciona - você precisa pensar um pouco. Como é que você sabe se um número faz parte da sequência de Fibonacci?
Por exemplo, como é que você sabe que 10 não faz parte da sequência de Fibonacci?
Pense, pense, pense, escreva no papel (não no computador), e pense mais um pouco.
só que o problema é que quando digito 8 ele não faz até 8 ele imprime os 8 primeiros numeros da sequencia
e o que o exercicio tá pedindo é mostrar até o numero que o usuario digitou…
Por isso que eu pedi para você pensar. O programa que você está usando (e copiou sei lá de quem) não faz o que o exercício está pedindo.
vou pensar um jeito então de quando passar pelo for ir comparando se tem o numero digitado na sequencia,
mas ainda está complicado
ou o caminho ainda não é esse???
Uma dica: a sequência de Fibonacci é sempre crescente (ou seja, os números sempre aumentam, nunca diminuem. Então você pode ir gerando os números de Fibonacci até que você ache um número que é maior ou igual ao número que você tem .
Responda-me o que seu programa deve imprimir no caso em que o número é maior do que você tem , e no caso em que o número é igual ao que você tem .
Como sabemos que fibonacci é uma sequencia de números, como sequencia de numeros pares, sequencia de numeros impares, todos com uma lógica por trás pra trazer a sequencia
fiz por exemplo, pra ver se o numero esta na sequencia de numeros pares, queria fazer exatamente a mesma coisa mas na sequencia de fibonacci…
será que você poderia me ajudar???
package lista02;
import java.util.Scanner;
public class Ex03 {
public static void main(String[] args) {
boolean estaNaSeguencia = false;
System.out.println("Digite um número para ver se está na sequencia de numeros pares: ");
int valor = new Scanner(System.in).nextInt();
for(int i= 0; i<= valor; i++){
if(valor % 2 == 0){
if(valor == i){
estaNaSeguencia = true;
}
}
}
if(estaNaSeguencia){
System.out.println("O número " + valor + " está na sequência de números pares");
}else{
System.out.println("O número " + valor + " não está na sequência de números pares");
}
}
}
Finalizei mas achei meu código da pra ser mais enxuto será que alguem poderia me ajudar…???
package lista02;
import java.util.Scanner;
public class FibonacciEx3 {
public static void main(String[] args) {
int num;
int fant, fatual, fprox;
int contador;
System.out.print("Digite um número para ver faz parte da sequência Fibonacci: ");
num = new Scanner(System.in).nextInt();
/* inicializacoes */
fant = 0;
fatual = 1;
contador = 1;
boolean estaNaSquencia = false;
while (contador < num) {
fprox = fatual + fant; /* proximo numero de Fibonacci */
fant = fatual;
fatual = fprox;
if (num == fprox) {
estaNaSquencia = true;
}
contador++;
}
if ((num == 1) || (num == 2) || (num == 3)) {
estaNaSquencia = true;
}
if (estaNaSquencia) {
System.out.println("O número " + num
+ " faz parte da sequencia Fibonacci");
} else {
System.out.println("O número " + num
+ " NÃO faz parte da sequencia Fibonacci");
}
}
}
Não olhei seu código, mas você realmente testou isso? Você tem de testar com números que estão e números que não estão na sequência de Fibonacci. Por exemplo, o número 1000 não está nessa sequência, mas o número 39088169 está.
Olhe em http://oeis.org/A000045 para lhe ajudar com alguns números de Fibonacci que você pode usar para testar.
Testei e já está funcionando inclusive com o número que você passou
39088169 e 1000
dando as seguintes saídas
O número 39088169 faz parte da sequencia Fibonacci
O número 1000 NÃO faz parte da sequencia Fibonacci
só achei meio gambiarra testar o numero que foi digitado com o :
if ((num == 1) || (num == 2) || (num == 3)) {
estaNaSquencia = true;
}
Fibonacci usando recursividade
[code]public class Fibonacci {
private int enesimoNumero = 0;
public void calcula(int x,int y,int total){
if(enesimoNumero++ < total){
System.out.print(y + " ");
calcula(y,x+y,total);
}
}
public static void main(String[] args) {
Fibonacci teste = new Fibonacci();
teste.calcula(0, 1, 10);
}
}[/code]
saída: 1 1 2 3 5 8 13 21 34 55
Uma soluçao para Serie Fibonacci utilizando apenas duas variaveis.
Na clausula for, indicamos o limite anterior ao ultimo resultado a ser calculado(nesse caso 200).
O motivo de declar a, b fora do “for”, é permitir a impressão do ultimo resultado da serie calculado(para ‘a’), saindo da estrutura do for.
class Fibonacci
{
public static void main (String[] args)
{
System.out.println("Serie de Fibonacci");
int a, b;
for(a=0,b=1;a<=200;b+=a,a=b-a)
{
System.out.print(a+",");
}
System.out.println(a);
}
}