• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

avernoro

compreender a seguinte função

4 mensagens neste tópico

Olá amigos tendo a seguinte definição da função divMod não consigo compreender o seu funcionamento, se alguém me quiser explicar eu agradeço...

divMod :: Int -> Int -> (Int, Int)
divMod n d | d > n = (0, n)
       | otherwise = let (a, b) = divMod (n-d) d
                        in (a+1, b)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

se o divisor é maior do que o dividendo, o quociente é 0 e o resto é o dividendo.

caso contrário, subtrais uma vez o divisor ao dividendo, efectuas a divisão e somas uma unidade ao quociente.

se deixar-mos o resto de lado, o que acontece é isto:

div 17 4

= (div (17 - 4) 4) +1

= (div (17 - 4 - 4) 4) + 2

= (div (17 - 4 - 4 - 4) 4) + 3

= (div (17 - 4 - 4 - 4 -4 ) 4) +4

= (div 1 4) + 4

= 0 + 4

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

isso é o que acontece ao a e o b, como é que funciona, o que é que acontece ao b que é o resto. Como é que a função o vai buscar ?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

o resto é sempre o mesmo...

mod 17 4

= mod (17 - 4) 4

= mod (17 - 4 - 4) 4

= ...

= mod 1 4

= 1

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora