qb45advr.hlp (Topic list)
Recursion
  Modules and Procedures   Recursion   Contents   Index
──────────────────────────────────────────────────────────────────────────────
Recursion
 
QuickBASIC lets you write recursive SUB or FUNCTION procedures (procedures
that call themselves). For example, the following program uses a recursive
FUNCTION to reverse a string of characters:
 
  DECLARE FUNCTION Reverse$ (StringVar$)
  LINE INPUT "Enter string to reverse: ", X$
  PRINT Reverse$(X$)
  END
 
  FUNCTION Reverse$ (S$)
    C$ = MID$(S$, 1, 1)
    IF C$ = "" THEN
      ' The first character is null, so return
      ' null--there's no more string left.
      Reverse$ = ""
    ELSE
      ' The reverse of a non-null string is the first character
      ' appended to the reverse of the remaining string.
      Reverse$ = Reverse$(MID$(S$, 2)) + C$
    END IF
  END FUNCTION
 
  Sample output
 
  Enter string to reverse: abcdefgh...tuvwxyz
  zyxwvut...hgfedcba
 
Reverse$ reverses a string by first testing for the simplest case--a null
string. If the string is null, then a null string is returned. If the
string is not null--there are characters--then Reverse$ simplifies the
problem. The reverse of a non-null string is the rest of the string, C$,
with the first character of the string concatenated to it. So Reverse$
calls itself to reverse the rest of the string and, when this is done,
concatenates the first character to the reversed string.
 
Recursion can use a lot of memory because automatic variables inside the
FUNCTION or SUB must be saved in order to restart the procedure when the
recursive call is finished. Because automatic variables are saved on the
stack, you may need to increase the stack size with the CLEAR statement to
keep from running out of stack space. Use the FRE function to determine by
how many bytes you need to adjust the stack size.