Recursividade Conta

Boa tarde a comunidade

Alguém poderia me ajudar na resolução desse exercício de recursividade

2.Implemente um método recursivo em Java que, dado um número inteiro n, faça a contagem positiva de quantos números 7 ele possui.

Exemplos:

Entrada: 0	 			Saída: 0
Entrada: 19	 			Saída: 0
Entrada: 7	 			Saída: 1
Entrada: 17	 			Saída: 1
Entrada: 77	 			Saída: 2
Entrada: 1734177 		Saída: 3

Me expressei mal , não quero a resolução pronta e sim norte por onde começar para chegar na resolução

Bom dia @lucas0019, cara vamos la, basicamente quando vc utiliza recursividade tem que ter em mente que é uma função que chama ela mesma baseado em um condição e so para quando essa mesma não é mais satisfeita. Meio complicado a explicação mas vamos la.
1º a meu ver apesar de especificar com a entrada sendo um numero inteiro utilizaria a entrada como String para poder utilizar a função substring e ir pegando casa a casa

2º estabelecer uma conidção para que toda vez que ache um numero 7 ele incremente uma variavel contadora e caso o tamanho tptal da string nao tenha sido alcançado ele execute a proxima chamada passando pro parametro a proxima posição.

Veja se isso ja te ajuda.
Qualquer coisa estamos por aqui

Abraços
Max

Bom dia FacaNaCaveira , poderia me mostrar como fica eu tentei aqui mas não consegui , por gentileza?

Opa acabei de consegui fazer aqui ,ficou assim:

    public static void main(String[] args) {
        int n = ocorrencia("1734177", '7');

        System.out.println("O numero de ocorrencias no numero apresentado é de : " + n);
    }

    private static int ocorrencia(String s, char c) {
        if (s.equals("")) {
            return 0;
        } else if (s.charAt(0) == c) {
            return ocorrencia(s.substring(1), c) + 1;
        } else {
            return ocorrencia(s.substring(1), c);
        }
    }

}

Só tem um problema no seu algoritmo:

Logo, o método recursivo deve receber um (1) inteiro e não uma string e um char.

Uma forma tosca de fazer:

public class Conta7 {
	private short contador = 0;
	private short indice = 0;
	
	private int contar(int n){
		String str = String.valueOf(n);
		
		if(str.length() == indice)
			return contador;
		
		if(str.charAt(indice) == '7')
			contador++;
		
		int numeroAtual = Integer.parseInt(str);
		
		indice++;
		
		return contar(numeroAtual);
	}
	
	public static void main(String[] args){
		Conta7 conta7 = new Conta7();
		System.out.println("Há " + conta7.contar(710737417) + " setes!");
	}
}

É estranho darem esses exercícios nada a ver com a realidade. Recursão não é a melhor opção para esse problema.

tem como deixar de modo recursivo e que eu possa inserir o propios valores

Talvez seu professor vai reclamar pois String não é um número inteiro, provavelmente você teria que usar int.

Código refatorado:

private int ocorrencias(int m, int n) {
    if (m < 10) {
        return m == n ? 1 : 0;
    }
    return ocorrencias(m % 10, n) + ocorrencias(m / 10, n);
}
1 curtida
import java.io.PrintStream;
import java.util.Scanner;

public class Programa {

    public static void main(String[] args) {
        try {
            Programa programa = new Programa();
            programa.executar();
        } catch (Throwable t) {
            t.printStackTrace();
        }
    }

    private final Scanner input = new Scanner(System.in);
    private final PrintStream output = System.out;

    public void executar() throws Exception {
        output.print("Entrada: ");
        int entrada = Integer.parseInt(input.nextLine());

        output.print("Número a verificar: ");
        int numero = Integer.parseInt(input.nextLine());

        int ocorrencias = ocorrencias(entrada, numero);
        output.printf("O número %d possui %d ocorrência do número %d%n", entrada, ocorrencias, numero);
    }

    private int ocorrencias(int m, int n) {
        if (m < 10) {
            return m == n ? 1 : 0;
        }
        return ocorrencias(m % 10, n) + ocorrencias(m / 10, n);        }
}
1 curtida

Como eu posso deixar esse modo com a ocorrência negativa? , ex: inseri o numero 809990, então a saída seria -3, porque há 3 numeros 9 , agradeço desde já .

staroski?

Como se faz pra um valor ficar negativo?
Coloca o sinal de menos na frente ou multiplica por -1.

int ocorrencias = -ocorrencias(entrada, numero);

Nesse caso só colocar o sinal , decupe-me se tiver fazendo perguntas toscas