Why we have a stack overflow in a recursive function in haskell?

1 recursion stack haskell overflow

where do i have an endless loop?

 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)
Run Code Online (Sandbox Code Playgroud)

sep*_*p2k 10

这是一个优先问题。(f2 n d-1)被解析为(f2 n d) - 1,这会导致无限递归,因为f2它使用相同的参数进行调用。您想要f2 n (d - 1)代替。