A função é recursiva pois fica chamando a si mesma, então devemos repeti - la até o b zerar e cair na primeira condição ,critério de parada, retornando o valor de a.
f (30, 21) é:
retorna f(21, 9(30 mod 21 = 1 resto 9))
f(21, 9)
retorna f(9, 3(21 mod 9 = 2 resto 3))
f(9, 3)
retorna f(3, 0(9 mod 3 = 3 resto 0))
f(3, 0)
Se b = 0 então retorna 3(valor de a)
Resposta 3.
Que Deus nos abençoe e nos proteja!
esse é o algoritmo do MDC de dois números. Pra achar o resultado vc só tem que decrementar até o menor termo e o retorno deste será o resultado:
O algoritmo continua a e so retorna algo quando b==0 e esse valor não é usado pra nada, então o programa termina quando acontecer apenas 1 retorno.
entao para a=30 e b = 21, vc vai apenas passando b como o primeiro termo e o segundo termo sendo o resto da divisao de a por b (30%21). Como não ha divisão exata é só subtrair a por b até que o resultado seja menor do que b(21):
f(30,21) = f(21, (30%21)) =
f(21, 9 ) =
f(9,3) =
f(3,0) => como b == 0 então retorna a que é 3. O valor 3 é então retornado por todas as chamadas anteriores do método que estavam aguardando a chamada recursiva aguardar para retornarem seu valor.