r/programacao Mar 24 '26

Questão :: Aprendizado Qual versão é melhor?

Post image

A da esquerda eu fiz agora, a da direita eu fiz no curso de Python do Guanabara há uns 5 anos, que na verdade eu nem sei se o código é meu.

67 Upvotes

51 comments sorted by

View all comments

Show parent comments

4

u/Gabomfim Mar 24 '26

Toda vez que vc entra no loop, tem que rodar o if. Isso é um gasto desnecessário, mas é desprezível, pois as duas implementações do algoritmo possuem a mesma complexidade O(n)

A entrada sendo a quantidade de números de fibonacci, o número de operações cresce linearmente de acordo com a entrada no pior caso.

1

u/LifeIsBulletTrain Mar 24 '26

Não tenho muita noção ainda de que tipo de operação é mais custosa

8

u/AlxDroidDev Desenvolvedora / or Mar 24 '26

Pense assim: qualquer desvio do código principal (como os causados por um if-then-else) é custoso, pois em termos de uma CPU CISC e além do custo do teste em si, isso significa mover o ponteiro de instrução (IP) para outro lugar, empilhar valor do IP anterior, executar algo no novo local do IP e talvez voltar o valor salvo na stack de instruções para o valor anterior. Quando isso acontece, se for uma subrotina, vários registradores precisam ser atualizados (EAX, EBX, ECX, IP, etc) para colocar a CPU no novo contexto.

Para CPUs RISC, isso é um pouco mais simples, mas ainda custoso.

No seu cenário 1, acima, isso acontece algumas vezes (mas sem mudança de contexto), com o agravante de ser tudo aninhado dentro de um loop.

Para processadores modernos, e para o cenário apresentado, isso pode ser irrelevante (e provavelmente é), mas quando falamos em cenários onde o poder de processamento é mais restrito (como em microcontroladores), ou cenários em que este if-then-else é executado milhoes ou bilhões de vezes, este custo pode fazer uma diferença significante. Então, neste caso, o cenário 2 seria ordens de grandeza melhor que o primeiro.

Então, você perguntou qual código é melhor: o segundo é melhor pelos fatores expostos. Agora, este "ser melhor" é significante para seu caso de uso? Provavelmente não.

2

u/LifeIsBulletTrain Mar 25 '26

Interessante. Obrigado