# RecursivelyDefinedFunctions

## Recursively Defined Functions (Sequences)

This PG code shows how to check student answers that are recursively defined functions.

PG problem file Explanation
```DOCUMENT();
"PGstandard.pl",
"MathObjects.pl",
"parserFunction.pl",
);
TEXT(beginproblem());
```

Initialization: We will be defining a new named function and adding it to the context, and the easiest way to do this is using `parserFunction.pl`. There is a more basic way to add functions to the context, which is explained in example 2 at AddingFunctions

```Context("Numeric")->variables->are(n=>"Real");
parserFunction(f => "sin(pi^n)+e");

\$fn = Formula("3 f(n-1) + 2");
```

Setup: We define a new named function `f` as something the student is unlikely to guess. The named function `f` is, in some sense, just a placeholder since the student will enter expressions involving `f(n-1)`, WeBWorK will interpret it internally as `sin(pi^(n-1))+e`, and the only thing the student sees is `f(n-1)`. If the recursion has an closed-form solution (e.g., the Fibonacci numbers are given by f(n) = (a^n - (1-a)^n)/sqrt(5) where a = (1+sqrt(5))/2) and you want to allows students to enter the closed-form solution, it would be good to define f using that explicit solution in case the student tries to answer the question by writing out the explicit solution (a^n - (1-a)^n)/sqrt(5) instead of using the shorthand f(n).

```Context()->texStrings;
BEGIN_TEXT
The current value \( f(n) \) is three
times the previous value, plus two.  Find
a recursive definition for \( f(n) \).
Enter \( f_{n-1} \) as \( f(n-1) \).
\$BR
\( f(n) \) = \{ ans_rule(20) \}
END_TEXT
Context()->normalStrings;
```

Main Text: The problem text section of the file is as we'd expect. We should tell students to use function notation rather than subscript notation so that they aren't confused about syntax.

```\$showPartialCorrectAnswers=1;

ANS( \$fn->cmp() );

ENDDOCUMENT();
```