Ajuda em lógica (java)

9 respostas
H

Gostaria de fazer esse exercício só que não tenho ideia de como construir a lógica, alguém poderia me dar uma ajuda?

A série de Fibonacci é formada pela seguinte sequência: 1, 1, 2, 3, 5, 8, 13, 21, 34, 55,…etc. Escreva um algoritmo que gere e apresente a série de Fibonacci até um número de termos definido pelo usuário (fazer validação ? de 1 a 30). Esta série se caracteriza pela soma de um termo posterior com o seu anterior subsequente.

Obrigado

9 Respostas

A

Dá uma pesquisada, aqui no fórum mesmo, sobre fibonacci e você vai encontrar várias discussões sobre este tema.

O google também retorna muitas coisas. É simples…

Se você desenvolver alguma coisa e tiver dúvidas, aí você volta aqui…

Abraço.

nel

Opa, halflife1940, se postar sempre esse tipo de questão no fórum ou o pessoal para de responder ou você somente estará se prejudicando, já que isso não é uma dúvida de Java e sim de raciocinio lógico.

Esta série não envolve nenhum mistério, se queres somente apresentar a série em um println(), tá ai o que você precisa.

public class Teste {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		int anterior = 0;
		int atual = 1;
		//nao sei o valor deste
		int proximo = 0;

		for(int i=0; i<30; i++){
			if(i==0){
			    System.out.println("1");
			   } else{
			    System.out.println(""+atual);
			  }
			
			proximo = anterior+atual;
			anterior = atual;		   
		    atual = proximo;		   
		}//fim do for

	}

}

Com certeza devem haver outras formas melhores de se fazer isso, mas como estou no trabalho fiz dessa forma, tenta fazer exercícios de lógica, senão vai se complicar amigo.

Abraços! :)

ViniGodoy

Tem a forma recursiva:
http://www.guj.com.br/posts/list/57712.java#303559

H
nel:
Opa, halflife1940, se postar sempre esse tipo de questão no fórum ou o pessoal para de responder ou você somente estará se prejudicando, já que isso não é uma dúvida de Java e sim de raciocinio lógico.

Esta série não envolve nenhum mistério, se queres somente apresentar a série em um println(), tá ai o que você precisa.

public class Teste {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		int anterior = 0;
		int atual = 1;
		//nao sei o valor deste
		int proximo = 0;

		for(int i=0; i<30; i++){
			if(i==0){
			    System.out.println("1");
			   } else{
			    System.out.println(""+atual);
			  }
			
			proximo = anterior+atual;
			anterior = atual;		   
		    atual = proximo;		   
		}//fim do for

	}

}

Com certeza devem haver outras formas melhores de se fazer isso, mas como estou no trabalho fiz dessa forma, tenta fazer exercícios de lógica, senão vai se complicar amigo.

Abraços! :)

Estou precisando fazer mesmo mais execícios de lógica.

Só não entendi o for e a linha 20 e 21.

Esse for pra mim está complicado, estou lendo uma apostila do Deitel pra tentar entender.

H

Vou colocar o que eu fiz:

package Lista03;
	
	import javax.swing.JOptionPane;

public class exe11 {

	public static void main (String args [ ] ){
		
		int inte, a=1, b=1, c=2, cont;
		
		String entrada;
		String saida;
		
		entrada = JOptionPane.showInputDialog (" Escreva um intervalo de repetições que gostaria ");
		inte = Integer.parseInt ( entrada );
		
		
		while (inte > 0 || inte < 30){
			
		
			for ( cont=0 ; cont < 30 ; cont++ ){
				
			c = b + a;
			a = b;
			b = c;

			}	
			saida = " A sequência é: " + cont; 
			JOptionPane.showMessageDialog (null, saida);
		}

	}
}

Eu rodo o programa e aparece que a sequência é o numero que eu digitei.

H

Alguém pode me ajudar, tenho que mandar esse exe hoje para a prof.

Estou tentando ate agora e nao consegui.

nel

Bem confuso o seu código e como não tenho lá muito tempo para ficar tentando entender, eu lhe pergunto…
Porque não usa o código que eu fiz, ele efetua a rotina que deseja corretamente, já rodou ele? :slight_smile:

Outro detalhe…eu coloquei no for <30 porque havia dito que queria que mostrasse a sequência de fibonacci até 30.
Como funciona o for ali, ele inicia a variavél int i em zero, por isso i=0 e a cada vez que ele executar o bloco de código que está contido dentro dele, ou seja, dentro do { seu codigo } ele incrementa (soma) o i de um em um, ou seja, i = i +1 (i++).

Sobre isso:

Só não entendi o for e a linha 20 e 21.

Nesta linha você diz que o valor anterior da sequência passa a ser o atual, afinal, você precisa “andar” na sequencia, ou seja, se o seu anterior era 2, ele deve passar a ser qual valor de acordo com fibonacci? Isso mesmo, 3, sendo que o 3 é o valor atual que você tem armazenado, sendo assim, o seu anterior assume o valor atual e passa a ser 3 e o seu atual deve assumir o valor do próximo número da sequência de fibonacci, ou seja, ele passa a ser 5 e assim sucessivamente. O que eu quero dizer é que o seu valor atual deve sempre guardar o valor da sequencia de fibonacci que ele parou antes de continuar percorrendo a sequência, ou seja, incrementando o i (ou finalizar o loop (for)). Entendeu? :slight_smile:

Espero ter ajudado. Abraços! :slight_smile:

H
package Lista03;
	
	import javax.swing.JOptionPane;

public class exe11 {

	public static void main (String args [ ] ){
		
		int inte, a=0, b=1, c=0, cont=0;
		
		String entrada;
		String saida;
		
		do{
		entrada = JOptionPane.showInputDialog (" Escreva um intervalo de repetições que gostaria ");
		inte = Integer.parseInt ( entrada );
		}
		while (inte < 0 || inte > 30);
		
			for ( a = 0, b = 1 ; cont < inte ; cont++ ){
				
			c = b + a;
			a = b;
			b = c;
			saida += c + " ";      // Esta dando um erro na palavra saida			
			
		}
			saida += "sequência de Fibonacci";        //Aqui também
			JOptionPane.showMessageDialog(null, saida);
	
		}

}

Finalmente consegui terminar, mas esta ocorrendo um erros.

rafaelsantini
public class Fibonacci {

    public static int fibonacci(int n) {
        if (n < 2) return n;
        return fibonacci(n - 1) + fibonacci(n - 2);
    }
    
    public static void main(String[] args) {
        int limite = Integer.valueOf(args[0]);
        for (int i = 0; i <= limite; i++) {
            System.out.println(fibonacci(i));
        }        
    }

}
Criado 7 de outubro de 2009
Ultima resposta 8 de out. de 2009
Respostas 9
Participantes 5