Fibonacci

Aproveite a idéia do marcos.junqueira e faça, só para testar, um programa que calcule o n-ésima termo da seqüência de Fibonacci de forma recursiva, e outro, de forma iterativa.
Faça testes com os dois programas com vários n-ésimos termos para ver a diferença de performance(sugiro que não teste com números acima de 40…)

me lembro muito bem q quando eu implementei essa recursao de cauda para o termo 50 funcionava perfeitamente se eu achar o código eu posto aqui

Valeu, pela força amigos!

Mantu e amigos eu sou novo na area de Java eu gostaria e apreender bem java… mas não sei por onde começar … se alguns de vcs puderem me ajudar eu agradeceria muito mesmo… me indiquem livros sites… tutoriais… etc… dai eu corro atraz…

Obrigadoo pelas diversas dicas e concordo com a posição acima, pois um enigma para uns pode ser fácil para outros !
Estava precisando de algo assim como este forum para arejar as idéias !
Sem Mais !

eu ainda não entendi porque usamos três variaveis!!
no meu pensamento só precisaríamos somar duas variaveis!
Sei lá fiquei meio perdida :stuck_out_tongue_winking_eye:
Alguém me explica?

Mas foi usado duas variaveis!!!

Felipe quis falar nos exemplos ateriores onde são utilizados três variaveis.
Não entendi porque colocamos o valor de uma na outra!! :wink:

[quote=rafaelaalves]Felipe quis falar nos exemplos ateriores onde são utilizados três variaveis.
Não entendi porque colocamos o valor de uma na outra!! ;)[/quote]

Olá Rafaela, não sei se eu vou te dar a explicação correta, mas nós colocamos a variável de uma na outra pois se obtém o próximo número usando a soma dos dois anteriores…
Eu também não entendi Fibonacci de primeira, mas o artigo do Wikipédia explica bem.

Meu algoritmo ficou assim:

[code]int f1=0,f2=1,fibonacci;

for(int i=0;i<=10;i++){
fibonacci=f1+f2;
f1=f2;
f2=fibonacci;
System.out.println(fibonacci);
}[/code]

O algoritmo do pessoal é melhor pois utiliza apenas duas variáveis enquanto o meu utiliza quatro, mas dessa forma fica bem legível com quatro variáveis para quem ainda não entendeu conseguir visualizar melhor.

Shalom!

Eu acredito que pra quem esta iniciando na linguagem como eu que estou fazendo os primeiros programas a resposta do nosso amigo sacolinno é a que mais ajuda pois utiliza apenas duas variaveis e nao usa termos ou tecnicas que iniciantes ainda nao entendem. Ou seja da pra entender todo o codigo fonte. Se algum iniciante esta em busca de resposta para o exercicio de fibonacci aconselho a usar o do nosso amigo sacolinno e analisar o codigo fonte. Obrigado a todos.

Sim Sim…esta serie do nosso amigo foi feita com duas variáveis e esta bem explicadinha!! ;D

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.