>> << Ndx Usr Pri Phr Dic Rel Voc !: wd Help Dictionary

22. Recursion
The factorial function`!` is commonly defined by the statement that factorial`n` is`n` times factorial`n-1` ,`` and by the further statement that factorial`0` is`1` .`` Such a definition is called recursive, because the function being defined recurs in its definition.
A case statement can be used to make a recursive definition, the case that employs the function under definition being chosen repeatedly until the terminating case is encountered. For example:

       factorial=: 1:`(]*factorial@<:) @. *
       factorial "0 i.6
    1 1 2 6 24 120

Note that`1:` denotes the constant function whose result is`1` .
In the sentence`(sum=: +/) i.5` the verb defined by the phrase`+/` is assigned a name before being used, but in the sentence`+/ i.5` it is used anonymously. In the definition of`factorial` above, it was essential to assign a name to make it possible to refer to it within the definition. However, the word`$:` provides self-reference that permits anonymous recursive definition. For example:

       1:`(]*$:@<:) @. * "0 i. 6
    1 1 2 6 24 120

In the Tower of Hanoi puzzle, a set of`n` discs (each of a different size) is to be moved from post A to post B using a third post C and under the restriction that a larger disc is never to be placed on a smaller. The following is a recursive definition of the process:

       h=: b`(p,.q,.r)@.c
        c=: 1: < [
        b=: 2&,@[ $ ]
          p=: <:@[ h 1: A. ]
          q=: 1: h ]
          r=: <:@[ h 5: A. ]

       3 h x=: 'ABC'
    AABACCA
    BCCBABB

       0 1 2 3 4 <@h"0 1 x
    ++-+---+-------+---------------+
    ||A|AAC|AABACCA|AACABBAACCBCAAC|
    ||B|CBB|BCCBABB|CBBCACCBBAABCBB|
    ++-+---+-------+---------------+

Exercises

22.1

Use the following as exercises in reading and writing:

       f=:1:`(+//.@(,:~)@($:@<:))@.*         Binomial Coeffs
       <@f"0 i.6                             Boxed binomials
       g=:1:`((],+/@(_2&{.))@$:@<:)@.*       Fibonacci

>> << Ndx Usr Pri Phr Dic Rel Voc !: wd Help Dictionary