Go to the Next or Previous section, the Detailed Contents, or the Amiga E Encyclopedia.

## 16.2 Mutual Recursion

In the previous section we saw the function `fact_rec`

which called itself.
If you have two functions, `fun1`

and `fun2`

, and `fun1`

calls `fun2`

, and `fun2`

calls `fun1`

, then this pair of functions are **mutually** recursive.
This extends to any amount of functions linked in this way.

This is a rather contrived example of a pair of mutually recursive functions.

PROC f(n)
IF n=1
RETURN 1
ELSEIF n>=2
RETURN n*g(n-1)
ELSE
Raise("F")
ENDIF
ENDPROC
PROC g(n)
IF n=1
RETURN 2*1
ELSEIF n>=2
RETURN 2*n*f(n-1)
ELSE
Raise("G")
ENDIF
ENDPROC

Both functions are very similar to the `fact_rec`

function, but `g`

returns double the normal values.
The overall effect is that every other value in long version of the multiplication is doubled.
So, `f(n)`

computes
n*(2*(n-1))*(n-2)*(2*(n-3))*...*2
which probably isn't all that interesting.

Go to the Next or Previous section, the Detailed Contents, or the Amiga E Encyclopedia.