Ajude o canal adquirindo meus cursos na Udemy: Bancos de Dados com MySQL Básico: bit.ly/35QdWE4 Lógica de Programação com Português Estruturado: bit.ly/3QKPn22 Programação em Python do Zero: bit.ly/python-boson Adquira também livros e outros itens na loja da Bóson Treinamentos na Amazon e ajude o canal a se manter e crescer: www.amazon.com.br/shop/bosontreinamentos
@caiotorres61569 ай бұрын
muito boa explicação! estudo Ciência da Computação em francês e isso me ajudou a compreender mil vezes melhor
@LucasMartinsdeVargas21127 ай бұрын
Valeu professor Fábio! Sua didática é excelente! 👏🏽😉
@linuxbashgnu6018 Жыл бұрын
Grande aula!
@yondaime500 Жыл бұрын
Um problema da recursividade é que cada nova chamada da função vai fazendo crescer a pilha de execução, então se a função precisar chamar a si mesma muitas vezes, pode acontecer o famoso "stack overflow". Existe a técnica de recursividade em cauda que pode impedir isso em algumas linguagens de programação. Outra armadilha é que a função pode chamar a si mesma mais de uma vez, aí o número de operações cresce exponencialmente com o número de passos de recursão. Um exemplo clássico é a sequência de Fibonacci (exemplo em Rust): fn fibonacci(n: u64) -> u64 { match n { 0 | 1 => 1, n => fibonacci(n - 1) + fibonacci(n - 2), } } A chamada fibonacci(40) leva 200ms para executar no meu computador. Dá para melhorar o desempenho de funções desse tipo usando uma técnica chamada "memoização", que consiste em guardar o resultado das últimas chamadas da função para evitar fazer o mesmo cáculo várias vezes. Mas nesse caso, essa função recursiva só é usada mesmo como benchmark para testar o desempenho da CPU. Se quisermos realmente calcular a sequência, podemos usar um simples laço for, que leva 5ns para fazer o mesmo cálculo fibonacci(40) (ou seja, é 40 milhões de vezes mais rápida). fn fibonacci(n: u64) -> u64 { let (mut cur, mut prev) = (1, 1); for _ in 1..n { (cur, prev) = (cur + prev, cur); } cur }