Recursion Worksheet
Table of Contents
1. Recursion
For recursion to work we need the function to take itself as a parameter.
{bind [fact = {(self n) => ... ... ... {self self {- n 1}}} ... ...}] {fact fact 4}}
1.1. Recursion worksheet
;; exercise 0: Using the binding form, give the name ;; `f` to the function that accepts an argument `x` and computes ;; x^2 + 4x + 4. Apply `f` to seven. {bind [f = {(x) => {+ {+ {* x x} {* 4 x}} 4}}] {f 7}} ;; exercise 1: Use the trick discussed in class to define ;; a `fact` function that computes the factorial of a given ;; number. Use it to compute the factorial of 12. {bind [fact = {(self n) => {if {<= n 0} 1 {* n {self self {- n 1}}}}}] {fact fact 4}} ;; exercise 2: Define a 'pow' function that accepts a base ;; and a (natural number) exponent, and computes the base to ;; the power of the exponent. Don't worry about non-natural ;; number exponents (6^1.5, 5^-4). {bind [pow = {(self base n) => {if {<= n 0} 1 {* base {self self base {- n 1}}}}}] {pow pow 6 3}} ;; exercise 3: use `fact` and `pow` to build a "sin" function ;; that accepts a number x and a number of terms `n`, and computes ;; (sin x) using `n` terms of the taylor expansion. (Note that ;; this is a little ambigious; do zero-coefficient terms count? ;; You can go either way on this.) Use this function to compute ;; the sine of 1 radian to an error of no more than ten to the minus ;; 30th. THIS AINT RIGHT {bind [pow = {(self base n) => {if {<= n 0} 1 {* base {self self base {- n 1}}}}}] [fact = {(self n) => {if {<= n 0} 1 {* n {self self {- n 1}}}}}] {bind [sin = {(self x n) => {if {<= n 0} 1 {{- x {/ {pow x {- n 2} {fact {- n 2}}}}}}}}] (sin sin 5 10)}}