2. Multiplicação de Números Naturais
• A multiplicação de números naturais (×) pode
ser definida por infinitas aplicações da função
de adição (+). Senão vejamos:
3. Multiplicação de Números Naturais
⎨
m X n =
0, se m = 0
n, se m = 1
n + n, se m = 2
n + n + n, se m = 3
:
:
Como não é possível escrever um número infinito de casos, este método de definição de
funções só é usual se existir alguma “regularidade” ou algum “princípio de unificação”
entre os casos, que permita gerar os casos não definidos, a partir de casos já definidos.
4. ⎨m X n =
0, se m = 0
n, se m = 1
n + n, se m = 2
n + n + n, se m = 3
:
:
Se existir tal princípio de unificação, ele deve ser estabelecido, sendo este o propósito
das “definições recursivas”, onde um objeto é definido em termos de si próprio. Por
exemplo, uma definição recursiva da multiplicação anterior pode ser:
×: N × N → N
5. Leis da Recursão
Assim como os robôs do romance “Eu robô” de
Isaac Asimov, todos os algoritmos recursivos devem
obedecer a três leis importantes e fundamentais:
1a. LEI: Um algoritmo recursivo deve ter um caso básico.
2a. LEI: Um algoritmo recursivo deve mudar o seu estado
e se aproximar do caso básico.
3a. LEI: Um algoritmo recursivo deve chamar a si mesmo,
recursivamente.
6. Leis da Recursão
Assim como os robôs de Isaac Asimov, todos os
algoritmos recursivos devem obedecer a três leis
importantes:
1 Um algoritmo recursivo deve ter um caso básico
Um caso básico é a condição que permite que o algoritmo
recursivo pare de recorrer. Um caso básico é tipicamente um
problema que é suficientemente pequeno para resolver
diretamente.
2 Um algoritmo recursivo deve mudar o seu estado e se aproximar
do caso básico.
Para obedecer a segunda lei, temos de arranjar uma mudança de
estado que leve o algoritmo para o caso básico. A mudança de
estado significa que alguns dados utilizados pelo algoritmo são
modificados. Normalmente, os dados que representam o problema
são reduzidos de alguma forma.
7. Leis da Recursão
3 Um algoritmo recursivo deve chamar a si mesmo,
recursivamente.
A última lei é que o algoritmo deve chamar a si mesmo. Esta é a
própria definição de recursão.
A recursão é um conceito confuso para muitos programadores
iniciantes. Como um programador novato, você aprendeu que
funções são boas porque você pode ter um grande problema e
dividi-lo em problemas menores.
Os problemas menores podem ser resolvidos escrevendo uma
função para resolver cada problema.
Quando falamos de recursão pode parecer que estamos a falar em
círculos. Nós temos um problema a resolver com uma função, mas
a função resolve o problema chamando a si mesma! Mas a lógica
não é circular de maneira alguma; a lógica de recursão é uma
expressão elegante de resolver um problema por dividi-lo em
problemas menores e mais fáceis.