Exercício de Recursividade (Número tem que ser maior que a soma dos dois anteriores)

4 respostas
J

Olá Pessoal,

Meu primeiro post aqui, estou com muita dificuldade em entender recursividade. O professor propôs um exercício que deverá ser criado um método recursivo que deve ser gerada uma sequencia de números super crescentes.

Dado: Informar um número inicial e um número final, o próximo número deverá ser maior que a soma dos dois anteriores, exemplo:
1 e 10, resposta será 1,2,4,7.

Eu tentei desenvolver e não consegui nada com nada, se alguém puder dar um help.

package Recursividade;

import javax.swing.JOptionPane;

public class SuperCrescente {

	public static void main(String[] args) {
		SuperCrescente superC = new SuperCrescente();
		int numeroInicial = 0;
		int numeroFinal = 0;
		
		numeroInicial = Integer.parseInt(JOptionPane.showInputDialog("Digite o valor inicial:"));
		numeroFinal = Integer.parseInt(JOptionPane.showInputDialog("Digite o valor inicial:"));
		
		superC.superCrescente(numeroInicial, numeroFinal);
	}
	public int superCrescente(int numeroInicial, int numeroFinal){
		return superCrescenteRecursivo(numeroInicial, numeroFinal, 1, 0);
	}
	
	public int superCrescenteRecursivo(int numeroInicial, int numeroFinal, int contador, int numero){
		if(numeroInicial == 0){
			return numeroInicial;
		}
		else if(numero < numeroFinal){
				numero = contador + ((numeroInicial -1) + (numeroInicial -2));
				if(numero <= numeroFinal){
					String achou = numero + " ";
					System.out.println(achou);
				}
				return superCrescenteRecursivo(numeroInicial + 1, numeroFinal, contador + 1, numero);
			}else{
				
				return numero;
			}
		}
		
	}

4 Respostas

juninhoall
jefersonamorimm:
Olá Pessoal,

Meu primeiro post aqui, estou com muita dificuldade em entender recursividade. O professor propôs um exercício que deverá ser criado um método recursivo que deve ser gerada uma sequencia de números super crescentes.

Dado: Informar um número inicial e um número final, o próximo número deverá ser maior que a soma dos dois anteriores, exemplo:
1 e 10, resposta será 1,2,4,7.

Eu tentei desenvolver e não consegui nada com nada, se alguém puder dar um help.

package Recursividade;

import javax.swing.JOptionPane;

public class SuperCrescente {

	public static void main(String[] args) {
		SuperCrescente superC = new SuperCrescente();
		int numeroInicial = 0;
		int numeroFinal = 0;
		
		numeroInicial = Integer.parseInt(JOptionPane.showInputDialog("Digite o valor inicial:"));
		numeroFinal = Integer.parseInt(JOptionPane.showInputDialog("Digite o valor inicial:"));
		
		superC.superCrescente(numeroInicial, numeroFinal);
	}
	public int superCrescente(int numeroInicial, int numeroFinal){
		return superCrescenteRecursivo(numeroInicial, numeroFinal, 1, 0);
	}
	
	public int superCrescenteRecursivo(int numeroInicial, int numeroFinal, int contador, int numero){
		if(numeroInicial == 0){
			return numeroInicial;
		}
		else if(numero < numeroFinal){
				numero = contador + ((numeroInicial -1) + (numeroInicial -2));
				if(numero <= numeroFinal){
					String achou = numero + " ";
					System.out.println(achou);
				}
				return superCrescenteRecursivo(numeroInicial + 1, numeroFinal, contador + 1, numero);
			}else{
				
				return numero;
			}
		}
		
	}
Acho que seu problema é com a lógica, então segue um material para lhe auxiliar http://pt.wikipedia.org/wiki/Sequ%C3%AAncia_de_Fibonacci
J

Vou dar uma olhada…

Mas se mais alguém puder ajudar, eu agradeço também…

juninhoall
jefersonamorimm:
Vou dar uma olhada...

Mas se mais alguém puder ajudar, eu agradeço também..

import java.util.Scanner;

/**
 *
 * @author Luiz Almeida Júnior
 */
public class Recursividade {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        int num1 = 0, num2 = 1, result;

        Scanner input = new Scanner(System.in);
        System.out.print("Informe a quantidade de repetições que haverá.: ");
        result = input.nextInt();

        for (int i = 0; i < result; i++) {
            num1 = num1 + num2;
            num2 = num1 - num2;
            System.out.println(num1);
        }
    }
}
Espero ter ajudado
J
juninhoall:
jefersonamorimm:
Vou dar uma olhada...

Mas se mais alguém puder ajudar, eu agradeço também..

import java.util.Scanner;

/**
 *
 * @author Luiz Almeida Júnior
 */
public class Recursividade {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        int num1 = 0, num2 = 1, result;

        Scanner input = new Scanner(System.in);
        System.out.print("Informe a quantidade de repetições que haverá.: ");
        result = input.nextInt();

        for (int i = 0; i < result; i++) {
            num1 = num1 + num2;
            num2 = num1 - num2;
            System.out.println(num1);
        }
    }
}
Espero ter ajudado

Infelizmente não é isto, o problema exige de conhecimentos sobre Recursividade.

Eu e meu amigo chegamos a resolução do problema, utilizando ArrayList a logica ficou mais fácil.

import java.util.ArrayList;

import javax.swing.JOptionPane;

public class SuperCrescente {
	private static ArrayList<Integer> lista = new ArrayList<>();

	public static void main(String[] args) {

		SuperCrescente superC = new SuperCrescente();
		int numeroInicial = 0;
		int numeroFinal = 0;

		numeroInicial = Integer.parseInt(JOptionPane
				.showInputDialog("Digite o valor inicial:"));
		numeroFinal = Integer.parseInt(JOptionPane
				.showInputDialog("Digite o valor final:"));

		lista.add(numeroInicial - 1);
		lista.add(numeroInicial);

		superC.superCrescente(numeroInicial, numeroFinal);
		
		superC.mostraLista();

	}

	public int superCrescente(int numeroInicial, int numeroFinal) {
		return superCrescenteRecursivo(numeroInicial, numeroFinal, 0);
	}

	public int superCrescenteRecursivo(int numeroInicial, int numeroFinal,int contador) {
		if (numeroFinal < numeroInicial) {
			return 1;
		} else {
			numeroInicial = lista.get(contador) + lista.get(contador + 1) + 1;
			if (numeroInicial <= numeroFinal) {

				lista.add(numeroInicial);
			} else {
				return numeroInicial;
			}
			return superCrescenteRecursivo(numeroInicial, numeroFinal,
					contador + 1);
		}
	}
	
	public void mostraLista(){
		for(Integer i : lista){
			if(i > lista.get(0)){
			System.out.println(i);
			}
		}
	}
}
Criado 18 de maio de 2014
Ultima resposta 19 de mai. de 2014
Respostas 4
Participantes 2