Ao fim desta parte do artigo, espero que consiga entender essa famosa frase sobre recursão.
Basicamente, usamos recursão quando, dentro de uma função, chamamos ela mesma. Porém, alteramos o argumento passado a cada chamada.
Assim, o processo executa até um determinado ponto. Você vai confundir-se se eu falar muito antes de mostrar.
Então vamos a um exemplo, que foi usado pela banda Europe para criar sua música de maior sucesso:
recursao.sh
#!/bin/bash
contagem_regressiva ()
{
if [ $1 -eq 0 ]
then
clear
echo "The Final Countdown !!!"
sleep 1
echo "tam-dam-dam-daaaam"
sleep 1
echo "tam-nam-nam-nam-naaaam"
return 0
fi
echo $1
sleep 1
clear
novo_tempo=`expr $1 - 1`
contagem_regressiva $novo_tempo
}
clear
contagem_regressiva 5
Permita e execute:
chmod +x recursao.sh
$ ./recursao.sh
Vamos lá:
- Primeiramente, clear limpa a tela do terminal e sleep 1 faz o terminal dormir por 1 segundo.
- A função recebe um número como argumento, o número 5.
- O primeiro 'if' teste se o argumento é 0, se for mostra a letra da música na tela. Como não é, o 'if' não é executado.
- Depois, o argumento é impresso na tela. Então é criada uma nova variável a partir do argumento subtraído de 1.
- Depois vem o pulo do gato, que é chamar a própria função, mas agora usando o 4 como argumento.
- Esse processo é repetido até o argumento ser 0. Quando é 0, a função vai, finalmente, rodar o 'if'.
- Note que o 'if' tem o 'return' que irá parar a função. E só para quando atinge 0 e mostra a letra da música do Europe.
Ou seja, os dois pontos obrigatórios da recursão: onde parar (no caso, quando for '0') e chamar a própria função, porém, com argumento alterado em relação a aquele que foi recebido.
Recursão é algo de extrema utilidade, pois trata casos de forma dinâmica. Ou seja, não importa o argumento, se for positivo, vai sempre executar a contagem regressiva. Recursão é alto de extrema de importância e uma maneira muito bonita de se resolver problemas.
No geral, exibe que bem menos código seja escrito, embora, no começo, pareça ser mais complicado.
Como exercício, sugiro que você crie uma função que calcule o fatorial de um número positivo.
Exemplo:
- 3! = 3x2x1= 6
- 4! = 4x3x2x1 = 24
- 5! = 5x4x3x2x1 = 120
* Dica: Fatorial de 'n' pode ser visto como 'n x fatorial(n-1)', e fatorial de 1 é 1.
Artigo produzido para o
Viva o Linux e para o blog
Programação Progressiva.