Exercícios Resolvidos de Recursividade

Ver Teoria

Enunciado

A função de Ackermann é definida para valores inteiros e não negativos m e n da seguinte forma:

  • A m , n = n + 1 , se m = 0
  • A m , n = A m - 1 ,   1 , se m > 0 e n = 0
  • A m ,   n = A ( m - 1 ,   A m , n - 1 ) , se m > 0 e n > 0

Faça uma função recursiva para implementá-la. Qual o valor de A(3,2)?

Passo 1

Eae, tudo tranquilo?

Para a função proposta nesse enunciado, teremos como parâmetros dois valores, m e n , ambos inteiros não negativos, assim como o valor a ser retornado pela função, então, podemos declarar esses valores como u n s i g n e d   i n t .

Passo 2

Vamos colocar os casos iniciais para a função de Ackermann. Temos o caso em que m = 0 , no qual será retornado n + 1 , e em que n = 0 e m > 0 , no qual será retornado A ( m - 1 ,   1 )

Repare que não é necessário especificar que m > 0 no segundo caso, pois m foi definido como u n s i g n e d   i n t , logo, temos m ≥ 0 e o caso de m = 0 já foi considerado no primeiro condicional, ou seja, se a função não terminou no primeiro condicional, significa que m é necessariamente maior que 0.

Passo 3

Agora, vamos acrescentar a recursividade dada por:

A m ,   n = A ( m - 1 ,   A m , n - 1 ) , se m > 0 e n > 0

Similar ao caso anterior, não há necessidade de especificar as condições de m > 0 e n > 0 , pois são as únicas condições que sobraram para serem analisadas.

Perceba que é possível passar a própria função A ( m ,   n - 1 ) como um parâmetro, pois o retorno de A foi declarado como do mesmo tipo dos parâmetros de A .

Passo 4

Por fim, basta calcularmos o valor de A ( 3,2 ) . Para isso, vamos incluir a biblioteca i o s t r e a m e imprimir na tela tal valor.

Resposta

Para o valor de A(3,2), temos: