Sequencia numérica recursiva em Java

2 respostas
recursividadejava
A

Olá,

Estou precisando fazer uma sequência numérica em modo recursivo que, após chegar no n número (5, no exemplo), começa a fazer a sequencia inversa. Exemplo:

[telefone removido]

Já fiz o que faz a sequência normal, agora resta o que inverta os números. Podem me ajudar?

import java.util.Scanner;

public class Main
{
public static void main(String[] args) {
	Scanner read = new Scanner(System.in);
	System.out.println("Sequencia numerica...\n");
	int sequencia = nSequencia(1);
}

static int nSequencia(int iSequencia) {
    System.out.print(iSequencia);
    if(iSequencia >= 5){
        return 1;
    }
    else{
        return nSequencia(iSequencia + 1);
    }
}  
}

2 Respostas

A
public static void main(String args[]) {
        System.out.println(sequencia("", 1, 1, 5));
    }

    //o retorno do tipo int gera limitações
    private static int sequencia(String acumula, int inicio, int ajuste, int fim) {
        
        acumula += ajuste <= fim ? ajuste++ : fim--;
        
        if (inicio > fim) {
            return Integer.parseInt(acumula);
        }
        return sequencia(acumula, inicio, ajuste, fim);
    }

Embora tenha usado a concatenação entre Strings, o recomendado é a utilização de StringBuilder.
Ver: imutabilidade da String.
Té+

A

Olá Adilson_Almeida

Sugiro que use um booleano para manipular o momento em que a recursividade retorna o número 5.
Neste exemplo que coloco, tornei a variável que representa o retorno e a variável boolean de controle como globais justamente para não ter de inserir mais parâmetros no método “nSequencia”, mantendo a integridade da estrutura do seu exemplo.

A saída no console é: [telefone removido]

Espero ter ajudado. :relaxed:

> import java.util.Scanner;

> public class Main {

>     static boolean reverte = false;
>     static int val = -1;

>     public static void main(String[] args) {
>         Scanner read = new Scanner(System.in);
> 	      System.out.println("Sequencia numerica...\n");
> 	      int sequencia = nSequencia(1);
>     }

>     static int nSequencia(int iSequencia) {
>         
>         System.out.print(iSequencia);
>         
>         if(reverte) {
>             if(iSequencia == 1)
>                 val = -1;  // escape
>             else
>                 val = nSequencia(iSequencia - 1);
>         }
>         else if(iSequencia < 5 && reverte == false) {
>             val = nSequencia(iSequencia + 1);
>         }
>         else if(iSequencia == 5 && reverte == false) {
>             reverte = true;
>             val = nSequencia(iSequencia);
>         }
>         return val;
>     } 
> }
Criado 15 de agosto de 2017
Ultima resposta 17 de ago. de 2017
Respostas 2
Participantes 3