Почему у нас есть переполнение стека в рекурсивной функции в haskell? - PullRequest
1 голос
/ 16 марта 2019

где у меня бесконечный цикл?

 f2 :: Int->Int->Int
 f2 n d 
    | d==2
       = 0 
    | n `mod` d ==0  && n`mod` d^3==0
       = 1 + (f2 n d-1)
    | otherwise
       = 0 + (f2 n d-1)

1 Ответ

10 голосов
/ 16 марта 2019

Это проблема приоритета.(f2 n d-1) анализируется как (f2 n d) - 1, что приводит к бесконечной рекурсии, потому что f2 вызывает себя с теми же аргументами.Вы хотите f2 n (d - 1) вместо.

...