yeah - recursion!€¦ · yeah - recursion! anton apostolatos source: the office. a3: recursion!...

Post on 14-Jun-2020

12 Views

Category:

Documents

0 Downloads

Preview:

Click to see full reader

TRANSCRIPT

YEAH - Recursion!Anton Apostolatos

Source: The Office

A3: Recursion!

Sierpinksi Recursive Tree Mandelbrot Set Grammar Solver

Sierpinski

Order 1 Order 2 Order 3

Order 4 Order 5 Order 6

Order 7 Order 8 Order 9

Write the recursive function

void drawSierpinskiTriangle(GWindow& gw, double x, double y, double size, int order)

gw: where to draw the triangle (see C++ docs!)(x, y): top-left corner of the trianglesize: length of triangle sideorder: the order of the triangle to draw

(x, y) (x + size, y)size / 2

size

H

(size / 2)2 + H2 = size2

H = (sqrt(3) / 2) * size

(x + (size/2),y + (sqrt(3)/2) * size)

Questions?

Recursive Tree

Write the recursive function

void drawTree(GWindow& gw, double x, double y, double size, int order)

gw: where to draw the triangle(x, y): top-left corner of the bounding boxsize: length of bounding boxorder: the order of the tree to draw

Note: using drawLine will make your life easier!

Every order n tree has seven trunks of order n-1

Lengths: each trunk has half their parent’s length

Angles: Each subtree extends from the tip of the previous trunk at angles ±45, ±30, ±15, and 0 degrees

Colors: Branches order >=2 are drawn in a color of BRANCH_COLOR and the leafy fringe branches of the tree (branches drawn at level 1) are drawn in a color of LEAF_COLOR

Useful functions

Note: recursive helper functions are sometimes required!

Recursive helper functions are friends, not food

void drawPrettyTrees(Gwindow& gw)

void drawTree(GWindow& gw, double x, double y, double size, int order)

Questions?

Mandelbrot Set

Definition of a complex number

Z = a + biReal part Imaginary part

Mandelbrot Set Definition: A complex number C is in the Mandelbrot set if, as n approaches infinity, Zn does not converge where Z0 = 0 and:

CS106B’s Mandelbrot Set Definition: A complex number C is in the Mandelbrot set if, after maxIterations, ZmaxIterations is not greater than 4 (diverging) where Z0 = 0 and:

0 1 2 3 4 5

0

1

2

3

Imaginary part

Complex Plane

Real part

[minX] + [minY] * i

Conversion: (row, col) → [minX + col * incX] + [minY + row * incY] * i

[minX + 4 * incX] + [minY + 2 * incY] * i

0 1 2 3 4 5

0

1

2

3

0 1 2 3 4 5

0

1

2

3

Imaginary part

Real part

Let’s say only (1, 3), (1,4) and (2,4) are in the Mandelbrot Set

Write the recursive function

int mandelbrotSet(GWindow& gw, double minX, double incX, double minY, double incY,int maxIterations, int color)

gw: where to draw the Mandelbrot Set(minX, minY): values of top-left corner of the grid (incX, incY): how much to increment per row/colmaxIterations: the maximum number of iterationscolor: the color of the Mandelbrot set

Questions?

Grammar Solver

Definitions

Formal language: set of words or symbols along with a set of rules, called syntax of a language

Grammar: way of describing the syntax of a language

Backus-Naur Form (BNF): set of rules where each rule names a symbol and the symbol’s legal transformations

<cat> ::= Siamese | Bobtail

Non-terminal Rules

or

<household-pet> ::= <cat> | <dog><cat> ::= Siamese | Bobtail<dog> ::= Labrador | Xoloitzcuintle

<s>::=<np> <vp>

<np>::=<dp> <adjp> <n>|<pn>

<dp>::=the|a

<adjp>::=<adj>|<adj> <adjp>

<adj>::=big|fat|green|wonderful|faulty|subliminal|pretentious

<n>::=dog|cat|man|university|father|mother|child|television

<pn>::=John|Jane|Sally|Spot|Fred|Elmo

<vp>::=<tv> <np>|<iv>

<tv>::=hit|honored|kissed|helped

<iv>::=died|collapsed|laughed|wept

The fat university laughed

Elmo kissed a green pretentious television

Write the function

Vector<string> grammarGenerate(istream& input, string symbol, int times)

input: input stream with file in BNF formsymbol: symbol to generatetimes: number of times to generate symbol

Symbol to generate (Enter to quit)? <s>

How many to generate? 7

1: a green green big dog honored Fred

2: the big child collapsed

3: a subliminal dog kissed the subliminal television

4: Fred died

5: the pretentious fat subliminal mother wept

6: Elmo honored a faulty television

7: Elmo honored Elmo

Sample run

Step 1: Reading Input File- Store contents of the grammar into a Map

- Think about what key/value data types or collections you want to use!

- The stringSplit and trim functions can be very helpful from strlib.h (Read the documentation!)

stringSplit(“hello;there”, ";"); // {"hello", "there"}

trim(“ hello there ”, ";"); // "hello there"}

Step 2: Generating Random Expressions

Recursively

- If S is a terminal symbol: result is symbol- If S is a non-terminal symbol: choose random rule for S

and explore it

Questions?

top related