Head Recursion: When the first statement of the function is the recursive call. (X)
Tail Recursion: When the last statement of the function is the recursive call and nothing has to be done when function call returns. (Y)
Nested Recursion: A recursive function where the argument passed to the function is the function itself. (Z)
Indirect Recursion: Indirect recursion occurs when a method invokes another method, eventually resulting in the original method being invoked again. (W)