Opinem: Qual código a seguir é mais claro?

8 respostas
F

Tenho dois métodos que calculam o fatorial de um número. Ambos retornam o mesmo resultado. Mas qual será o mais claro de se entender? O com recursividade ou sem recursividade? Eu achei mais claro o sem recursividade.

public static int fatorial1(int valor){ // Sem recursividade

int num = 1;

for ( ; valor>0; valor){

num *=valor;

}

return num;

}
public static int fatorial(int valor){ // com recursividade
    if (valor==1 || valor==0){
        return 1;
    } else {
        int num = valor;
        num *=fatorial(valor-1);
        return num;
    }
}

8 Respostas

G

pra que complicar se vc pode simplificar…

se pra vc esta melhor sem e funciona… pra que bater cabeça?

utilize comentarios durante o codigo… isso sim ajuda a entender melhor. Por que hoje vc olha e sabe o q é… daki 1 ano, caso vc precise denovo, vai ser bem mais dificil entender…

E

Isso é muito subjetivo, varia de pessoa para pessoa, no começo é difícil entender a recursividade e os métodos iterativos podem parecer mais simples, mas com um pouco de prática a recursividade passa a “fluir” melhor… Só que quase sempre (esse caso incluso) o método iterativo tem um desempenho muito superior, as vezes pelas simplicidade do código vale pena usar a recursividade mesmo assim, mas esse não é o caso…

InicianteJavaHenriqu

Não sou especialista. :smiley: Mas, na minha opinião e nestes exemplos (me refiro ao seus 2 exemplos e não ao calculo de fatorial em si), ficaria melhor sem recursividade. Aqui tem um exemplo, bem parecido com o seu, porém um pouco mais resumido.

flw :thumbup:

saoj

Tem problemas que são mais simples via recursividade, outros mais simples via loop.

Se a solucão exigir muitas iteracões, vc não pode usar recursividade porque o stack é limitado.

Entenda bem os dois! Os problemas mais casca-grossa são mais fáceis de resolver via recursividade. Tentar resolve-los vai for é muito mais difícil. Não vale a pena nem comecar…

discorpio

Boa noite a todos.

Sempre, eu digo, sempre opte pela simplicidade em qualquer caso.

Se o código sem a recursividade for mais simples e funciona, então é ele que você deve optar, caso contrário a recursividade seria melhor opção se este código fosse o mais simples a ser usado e funcionando, aliás, como já foi dito aqui, a recursividade sempre é bem funcional em casos mais complicados, tornando o mais simples.

Lembre-se, DEUS fez todo este universo através de uma singularidade, onde ele era menor do que a ponta do seu dedo indicador, e fazendo tudo de maneira simples, ou seja, juntou os elementos químicos básicos aqui, ali e acolá, e criou esta imensidão quase que imensurável, e porque não dizer infinito, ou quase infinito universo.

maior_abandonado

eu acredito que o código com o loop seja mais claro.

além do mais procuro somente usar recursividade quando é mesmo necessário, me parece um código um pouco menos claro que com o loop e gasta mais recursos.

drsmachado

Nenhum dos dois, o tópico não segue as regras do fórum, está sem a formatação com a tag [code]

ViniGodoy

A recursividade só é clara quando escreve explicitamente a fórmula.

No caso do fatorial, a definição matemática clássica:

Fat N = N * Fat(N-1), se n > 1
1, se n < 2

Então, só ficaria claro assim:

public int fat(int n) { return n < 2 ? 1 : fat(n-1); }

No caso de um fatorial, provavelmente a solução com o loop será mais fácil de entender para a maior parte dos programadores.
Agora, algorítmos de árvore, onde o pensamento recurso é natural, geralmente ficam mais claros da forma recursiva.

Criado 7 de fevereiro de 2012
Ultima resposta 11 de fev. de 2012
Respostas 8
Participantes 9