## Recursive

- XLogo library of procedures

These procedures use recursive techniques. They can be very inefficient and are not always the best method to use.

Add two numbers, using recursion. I must be greater than 0.

# return sum of two input numbers
If :I = 0 [Output :J] [Output Add :I-1 :J+1]
End

To Test
# test procedure
Make "A 36 Make "B 12
Print (Sentence [The sum of] :A [and] :B [is] Add :A :B)
End

Factorial
Return the factorial of a number. For example, factorial 6 = 6x5x4x3x2x1 = 720. It is written 6! sometimes spoken as '6 bang'.

To Factorial :N
# return factorial of N
If :N = 1 [Output 1] [Output :N * Factorial :N-1]
End

To Test
# test procedure
Make "A 12
Make "Factorial Factorial :A
Print (Sentence [The factorial of] :A [is] :Factorial)
End

Fibonacci
Return the Nth Fibonacci number. N must be greater than 0.

To Fib :N
# return Nth Fibonacci number
If :N < 2 [Output :N] [Output (Fib :N-1) + Fib :N-2]
End

To Test
# test procedure
Make "N 12
Print (Sentence [The] :N [th Fibonacci number is] Fib :N)
End

Highest Common Factor (HCF)
Also called Greatest Common Denominator (GCD) or Greatest Common Multiple (GCM).
This procedure uses Euclid's algorithm (dating from ancient Greek times c.300BC), to generate the highest common factor (HCF) of two numbers. For example, the HCF of 18 and 24 is 6. Because 6 is the largest whole number that will divide into both 18 and 24 exactly.
HCF 18 24 and HCF 24 18 will produce the same result.

To HCF :I :J
# return highest common factor of two integers
LocalMake "Rem Modulo :I :J
If :Rem =0 [Output :J] [Output HCF :J :Rem]
End

To Test
# test procedure
Make "A 3654 Make "B 1365
Print (Sentence [Highest common factor of] :A [and] :B [is] HCF :A :B)
End

Lowest Common Multiple (LCM)
This procedure returns the lowest common multiple of two values by using the highest common factor (HCF) procedure.

To LCM :I :J
# return lowest common multiple of two integers
Output :I*:J / HCF :I :J
End

To HCF :I :J
# return highest common factor of two integers
LocalMake "Rem Modulo :I :J
If :Rem =0 [Output :J] [Output HCF :J :Rem]
End

To Test
# test procedure
Make "A 9 Make "B 42
Print (Sentence [Lowest common multiple of] :A [and] :B [is] LCM :A :B)
End

Sum 1 to N
Return the sum of numbers 1 to N. eg Sum1toN 5 = 1+2+3+4+5 = 15.

To Sum1toN :N
# return sum of integers 1 to N
If :N<1 [Output 0] [Output :N+ Sum1toN :N-1]
End

To Test
# test procedure
Make "N 5
Print (Sentence [The sum of 1 to] :N [is ] Sum1toN :N)
End

XLogo