[Resolvido] Contar chamadas de uma função

3 respostas
A

Bom dia galera!

Estou fazendo um trabalho para a faculdade no qual devo desenvolver um programa que calcule fibonacci por meio de uma função reursiva, eu devo mostrar o tempo gasto para fazer o calculo e tambem as vezes que esta função foi chamada.
Bom, a questão do tempo eu ja dei um jeito utilizando o comando System.currentTimeMillis(); mas quanto as vezes co que a função é executada eu não estou sabendo fazer.

Segue o codigo fonte do meu programa, ja tentei contar usando uma variavel cont dentro da função, mas como a variavel é declarada dentro da função toda vez que a função era executada ela era zerada e ficava valendo apenas 1.

package fibonacci;

import java.util.Scanner;

public class Fibonacci {
    
    public static long fiboRecursivo(long T){
        if (T <= 2)
            return 1;
        else
            return Fibonacci.fiboRecursivo(T-1)+Fibonacci.fiboRecursivo(T-2);
    }

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        long fibo = 0;
        int termo = 0;
        long inicio = 0;
        long fim = 0;
        
        while (termo < 1){
            System.out.print("Digite o termo que deseja calcular: ");
            termo = sc.nextInt();
        }
        
        inicio = System.currentTimeMillis();
        fibo = Fibonacci.fiboRecursivo(termo);
        fim = System.currentTimeMillis();
        
        System.out.println("forma gastos "+(fim-inicio)/1000+"s");
        System.out.println("O termo <"+termo+"> de fibonacci é: "+fibo);
    }
}

Se alguem puder e ajudar com essa duvida eu agradeço.
Abraços

3 Respostas

Rodrigo_Sasaki
Uma solução que não é muito recomendada, mas pode te ajudar nesse caso é usar uma variável estática. Assim:
public class Fibonacci{

    private static int contador = 0;

    public static long fiboRecursivo(long T){  
        contador++;
        if (T <= 2)  
            return 1;  
        else  
            return Fibonacci.fiboRecursivo(T-1)+Fibonacci.fiboRecursivo(T-2);  
    }  

}
Assim a cada vez que o método for invocado, será incrementado 1 ao seu contador.
A

Valeu amigo, realmente assim funciona.
Esta aqui iaginando se tinha alguma coisa desse tipo pra usar, mas como sou novo em Java não sabia o que poderia ser.

Valeu mesmo a ajuda.

Rodrigo_Sasaki

Sem problemas. :slight_smile:
se não tem mais dúvidas edite seu primeiro post do tópico e adicione a tag [Resolvido] ao título, por favor.

Criado 12 de junho de 2012
Ultima resposta 12 de jun. de 2012
Respostas 3
Participantes 2