Vamos fazer um exercício famoso, e isso pode surgir como uma pergunta de entrevista.
Vamos tentar implementar os números de Fibonacci e os números de Fibonacci são assim.
O primeiro número é zero, depois o segundo número é um, eles sempre começam com zero um, então é isso que
acontece.
Adicionamos zero com um para igualar o próximo número.
Adicionamos um com um para igualar o próximo número, somamos um por dois para obter o próximo número dois, três para somar
o próximo número cinco, oito para somar o próximo número.
E assim por diante.
Como você pode ver, isso cresce exponencialmente.
Bem, cresce muito, muito rápido.
E esse tipo de numeração realmente aparece muito na natureza, mas também é um problema interessante
porque esses números, embora no início, crescem muito, muito lentamente.
Eles se tornam cada vez maiores e maiores, e isso se torna um problema que pode realmente monopolizar os recursos.
Então era isso que eu queria fazer.
Vamos criar uma função.
FIB que leva um número.
E aqui, esse número vai ser o número índice do Fibonacci.
Então, por exemplo, se fosse o 20º número, deveria ter isso.
Então, se eu quiser, vamos dizer fib 20 aqui.
Nesse caso, quero que você retorne todos esses números.
Usando geradores, de modo que seja um por um até chegarmos a este local.
Agora, há duas maneiras de fazer isso, você pode fazer com a lista ou podemos fazer com um gerador.
E você notará que, com um gerador, é muito mais fácil de fazer do que com uma lista
porque, eventualmente, com uma lista você vai ficar sem recursos.
Então, o que eu quero que você faça é mostrar aqui os números que você vê aqui até 20.
E se você quiser, pode continuar aumentando esse número e ver o que acontece.
E, como bônus, você também pode tentar implementar isso com uma lista.
Portanto, ele também é exibido em uma lista gigante.
Pause o vídeo se quiser aqui.
Caso contrário, continuarei com a resposta.
Primeiro, o que queremos fazer é dizer que A será igual a zero e B será igual a um, então A e
B serão o início dos números.
Agora, aqui, vamos usar o gerador de alcance.
Para Lupe.
Esse número de vezes que iremos fornecer a função.
Agora, aqui, primeiro, quero ser para agora ou dois, agora chame o que B era, que é um e B seja o que
quer que seja o próximo número.
Lembra do rolo com Fibonacci?
Adicionamos os primeiros dois números para obter o terceiro número.
Portanto, temos A B para obter o próximo número, A, B para obter o próximo número e, em seguida, um B para obter o próximo número.
Portanto, a primeira coisa que quero fazer é realmente ceder e dizer, ei, apenas me dê o que quer que seja e, em seguida, pause a
função até a próxima parte.
Depois disso, depois que o loop for vai para a próxima parte, vou dizer que quero A dois iguais a B.
E eu quero que B seja igual a A mais B.
Vamos ver se isso faz sentido, estou dizendo, ei, retorne ou produza um desta lista para que
seja zero no início, então eu quero que você faça um igual a um agora porque estamos mudando e então eu quer
que B seja igual a um porque A se tornou um e então o anterior.
Então B se torna dois.
Se olharmos aqui, é por isso que queremos ter A e B aqui e então queremos mover apenas um como
este.
Portanto, B ainda deve ser um.
Portanto, embora possamos querer fazer aqui é realmente não modificar a.
Até que possamos fazer A mais B.
Então, como podemos fazer isso?
Bem, podemos simplesmente dizer.
Digamos que seja uma variável temporária e essa temperatura vai manter o que a era quando chegarmos aqui, que é
zero, e então vamos modificar A para ser igual a um e então B vai ser em vez de
A mais, B será temp, que é zero.
Além disso, seja lá o que B era originalmente, que eu sei que pode ficar confuso, você pode querer fazer uma pausa aqui
ou talvez imprimir e ver exatamente o que está acontecendo, mas espero que nossa função funcione agora.
Se agora eu fizer algo como quatro X no ajuste e der, digamos cem.
E vamos imprimir a resposta.
Então imprima.
X e eu corremos isso.
Tudo bem, olhe só, eu pego todos os meus números de Fibonacci, vamos fazer 20, como vimos no exemplo, se eu
clicar em executar.
Eu ganho quatro um oito um.
Então, eu tenho 19 porque, lembre-se, nossa contagem começa em zero, então tecnicamente aqui, se quisermos, podemos fazer 21 aqui,
clicar, correr e devemos obter seis, sete, seis, cinco, que é o que temos aqui.
Muito, muito legal, mas você pode ver como o número aumenta dramaticamente.
Aumentamos para mil agora, se fizéssemos isso em uma lista, seria algo assim.
Vamos copiar aqui.
Agora, ajustar com uma lista significaria que temos que adicionar uma lista aqui.
E em vez de ceder, resultará em acréscimo de ponto.
E vamos acrescentar qualquer que seja o valor a, que é o valor inicial.
E então faremos a mesma coisa que fizemos antes, então, em vez de ILT, agora estamos
apenas acrescentando a esta lista e no final apenas retornamos.
O resultado da lista agora, se eu retornar isso, digamos, fib to e der cem e eu clicar em executar, vamos
comentar o original com o gerador.
Bem, provavelmente deveríamos imprimir isso, não é?
Então, vamos imprimir.
E clique em correr.
Tudo bem, essa é uma lista enorme.
Agora, se fôssemos fazer mil aqui.
Você vê que está demorando um pouco.
E se fizermos 10000?
Certo, definitivamente está demorando um pouco, e você pode ver aqui como isso está funcionando bem.
Você sabe o que?
Eu vou parar com isso.
E volte para o nosso gerador.
Maneira e vamos fazer dez mil aqui, vamos ver como fica dez mil com um gerador.
Bem, ainda está funcionando muito, mas não estou guardando nada disso na memória.
Estamos pegando um por um e posso agir de acordo com nosso caso, apenas imprimindo um por um.
Agora, esta é uma pergunta comum de entrevista, na verdade é um pouco desnecessariamente confusa, eu acho.
Mas demonstra o poder dos geradores.
Você pode ter que assistir a este vídeo algumas vezes, mas espero que agora você esteja se sentindo um
pouco confortável com o uso de intervalos e como podemos melhorar o desempenho usando geradores.
Te vejo no próximo.
Bye Bye.