Função Recursiva Com Problema, Não Acho o Erro! Uma Ajuda Por Favor

Boa noite a todos, estava tentando fazer uma função recursiva para saber se o número é ou não primo, porém em alguns números (9, 15, …), ao identificar que não é um número primo e executar o ultimo return como false, a função é executada mais uma vez e reatribuída como o return true. Alguém por favor me mostra aonde estou errando, achei outros métodos de como fazer essa verificação, porém fiquei intrigado com esse caso.

[code]
package primo;
import java.util.Scanner;

public class Primo {

public static void main(String[] args) {
    Scanner leia = new Scanner(System.in);
    System.out.print("Informe um número: ");
    int num = leia.nextInt();
    boolean resultado = primo(num, 1);
    if(resultado){
        System.out.println(num+" é primo");
    } else {
        System.out.println(num+" não é primo");
    }
 
}

public static boolean primo(int a, int b) {
        b++;
        boolean condicao = true;
        if(a>3){
    	if(a%b==0 && a!=b) {
                condicao = false;
    	} if(a == b){
                condicao = true;
            }else if(condicao){  
                primo(a, b); // <--- função recursiva 
            }     
        }   	 
        return condicao; //<--- sempre que esse return é executado ele volta mais uma vez direto para a função recursiva, que reatribui o valor true em condição           
    }

}[/code]

Isso acontece porque você não está utilizando recursão de cauda.

Vamos supor que você envia 9 e 1 como parâmetros iniciais.
Na primeira chamada ao método você vai cair no terceiro if, que chama primo novamente com 9 e 2, porém seu estado atual nessa chamada écondicao = true; a = 9; b = 2; Quando você chama primo novamente, cai na primeira condição que diz que condicao será false, nessa chamada seu estado é condicao = false; a = 9; b = 3;porém você deixa o código continuar executando, e volta pra primeira execução, onde condicao é true, e retorna. A segunda chamada à função simplesmente se perde. Você pode corrigir isso assim:} else if (condicao) { condicao = primo(a, b); }

Obrigado pela ajuda, realmente não tinha percebido isso ^^