Fibonacci

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