This document contains notes on JavaScript functions from a course. It discusses:
1) Functions allow breaking programs into modules for easier maintenance and debugging. Functions in JavaScript include predefined and programmer-defined methods.
2) Functions receive arguments, can call other functions in a hierarchical relationship, and may return values. Functions define local variables that do not exist outside the function.
3) Examples show defining and calling functions to square numbers, find the maximum of three values, and generate random numbers by scaling and shifting the output of Math.random().
09/30/15 Š ReemAl-Attas 2
Introduction
īŦSoftware design
īĄ Break software up into modules
īŦ Easier to maintain and debug
īĄ Divide and conquer
3.
09/30/15 Š ReemAl-Attas 3
Program Modules in JavaScript
īŦModules in JavaScript
īĄ Functions
īĄ Methods
īŦ Belong to an object
īĄ JavaScript includes many useful pre-defined
methods
īŦ Combine with programmer-defined methods to
make a program
4.
09/30/15 Š ReemAl-Attas 4
Program Modules in JavaScript
īŦFunctions
īĄ Started by function call
īĄ Receive necessary information via
arguments (parameters)
īĄ Boss-Worker relationship
īŦ Calling function
īŦ Called function
īŦ Return value when finished
īŦ Can have many tiers
5.
09/30/15 Š ReemAl-Attas 5
Program Modules in JavaScript
boss
worker1 worker2 worker3
worker4 worker5
Fig. 10.1 Hierarchical boss-function/worker-function relationship.
6.
09/30/15 Š ReemAl-Attas 6
Program Modules in JavaScript
īŦFunction calls
īĄ Name
īĄ Left parenthesis
īĄ Arguments separated by commas
īŦ Constants, variables or expressions
īĄ Right parenthesis
īĄ Examples:
total += parseFloat( inputValue );
total += parseFloat( s1 + s2 );
7.
09/30/15 Š ReemAl-Attas 7
Programmer-Defined Functions
īŦDefining functions
īĄ All variables declared in function are called
local
īŦ Do not exist outside current function
īĄ Parameters
īŦ Also local variables
īĄ Promotes reusability
īŦ Keep short
īŦ Name clearly
8.
09/30/15 Š ReemAl-Attas 8
Function Definitions
īŦFormat of a function definition
function function-name( parameter-list )
{
declarations and statements
}
īĄ Function name any valid identifier
īĄ Parameter list names of variables that will
receive arguments
īŦMust have same number as function call
īŦMay be empty
īĄ Declarations and statements
īŦ Function body (âblockâ of code)
9.
09/30/15 Š ReemAl-Attas 9
Function Definitions
īŦReturning control
īĄ return statement
īĄ Can return either nothing, or a value
return expression;
īĄ No return statement same as return;
īĄ Not returning a value when expected is an
error
10.
09/30/15 Š ReemAl-Attas 10
Function Definitions
īŦWriting a function to square two
numbers
īĄ for loop from 1 to 10
īĄ Pass each number as argument to square
īĄ return value of argument multiplied by itself
īĄ Display result
11.
1 <?xml version= "1.0"?>
2 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
3 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
4
5 <!-- Fig. 10.2: SquareInt.html -->
6 <!-- Square function -->
7
8 <html xmlns = "http://www.w3.org/1999/xhtml">
9 <head>
10 <title>A Programmer-Defined square Function</title>
11
12 <script type = "text/javascript">
13 <!--
14 document.writeln(
15 "<h1>Square the numbers from 1 to 10</h1>" );
16
17 // square the numbers from 1 to 10
18 for ( var x = 1; x <= 10; ++x )
19 document.writeln( "The square of " + x + " is " +
20 square( x ) + "<br />" );
21
Calling function square and passing it the value of x.
12.
22 // Thefollowing square function's body is executed
23 // only when the function is explicitly called.
24
25 // square function definition
26 function square( y )
27 {
28 return y * y;
29 }
30 // -->
31 </script>
32
33 </head><body></body>
34 </html>
Variable y gets the value of variable x.
The return statement passes the value of y * y back
to the calling function.
09/30/15 Š ReemAl-Attas 14
Function Definitions
īŦFinding the maximum of 3 numbers
īĄ Prompt for 3 inputs
īĄ Convert to numbers
īĄ Pass to maximum
īĄ Math.max
15.
1 <?xml version= "1.0"?>
2 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
3 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
4
5 <!-- Fig. 10.3: maximum.html -->
6 <!-- Maximum function -->
7
8 <html xmlns = "http://www.w3.org/1999/xhtml">
9 <head>
10 <title>Finding the Maximum of Three Values</title>
11
12 <script type = "text/javascript">
13 <!--
14 var input1 =
15 window.prompt( "Enter first number", "0" );
16 var input2 =
17 window.prompt( "Enter second number", "0" );
18 var input3 =
19 window.prompt( "Enter third number", "0" );
20
21 var value1 = parseFloat( input1 );
22 var value2 = parseFloat( input2 );
23 var value3 = parseFloat( input3 );
Prompt for the user to input three integers.
16.
24
25 var maxValue= maximum( value1, value2, value3 );
26
27 document.writeln( "First number: " + value1 +
28 "<br />Second number: " + value2 +
29 "<br />Third number: " + value3 +
30 "<br />Maximum is: " + maxValue );
31
32 // maximum method definition (called from line 25)
33 function maximum( x, y, z )
34 {
35 return Math.max( x, Math.max( y, z ) );
36 }
37 // -->
38 </script>
39
40 </head>
41 <body>
42 <p>Click Refresh (or Reload) to run the script again</p>
43 </body>
44 </html>
Call function maximum and pass it the value of
variables value1, value2 and value3.
Variables x, y and z get the value of variables
value1, value2 and value3, respectively.
Method max returns the larger of the two
integers passed to it.
09/30/15 Š ReemAl-Attas 19
Random-Number Generation
īŦRandom-number generation introduces
element of chance
īĄ Math.random
var randomValue = Math.random();
īĄ Floating point value between 0 and 1, but
not including 1.
īĄ Adjust range by scaling and shifting
īĄ Math.floor
īŦ Always round down
Math.floor(1 + Math.random() * 6)
20.
1 <?xml version= "1.0"?>
2 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
3 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
4
5 <!-- Fig. 10.4: RandomInt.html -->
6 <!-- Demonstrating the Random method -->
7
8 <html xmlns = "http://www.w3.org/1999/xhtml">
9 <head>
10 <title>Shifted and Scaled Random Integers</title>
11
12 <script type = "text/javascript">
13 <!--
14 var value;
15
16 document.writeln(
17 "<table border = "1" width = "50%">" );
18 document.writeln(
19 "<caption>Random Numbers</caption><tr>" );
20
21.
21 for (var i = 1; i <= 20; i++ ) {
22 value = Math.floor( 1 + Math.random() * 6 );
23 document.writeln( "<td>" + value + "</td>" );
24
25 // write end and start <tr> tags when
26 // i is a multiple of 5 and not 20
27 if ( i % 5 == 0 && i != 20 )
28 document.writeln( "</tr><tr>" );
29 }
30
31 document.writeln( "</tr></table>" );
32 // -->
33 </script>
34
35 </head>
36 <body>
37 <p>Click Refresh (or Reload) to run the script again</p>
38 </body>
39 </html>
The for loop creates 20
table cells (4 rows x 5
columns).
Each cell is populated
with a random number
generated by method
random.
Method floor rounds the number
generated by method random down.
1 <?xml version= "1.0"?>
2 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
3 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
4
5 <!-- Fig. 10.5: RollDie.html -->
6 <!-- Rolling a Six-Sided Die -->
7
8 <html xmlns = "http://www.w3.org/1999/xhtml">
9 <head>
10 <title>Roll a Six-Sided Die 6000 Times</title>
11
12 <script type = "text/javascript">
13 <!--
14 var frequency1 = 0, frequency2 = 0,
15 frequency3 = 0, frequency4 = 0,
16 frequency5 = 0, frequency6 = 0, face;
17
18 // summarize results
19 for ( var roll = 1; roll <= 6000; ++roll ) {
20 face = Math.floor( 1 + Math.random() * 6 );
21
This expression uses method random to
generate a random number between 1 and 6.
24.
RollDie.html
(2 of 3)
22switch ( face ) {
23 case 1:
24 ++frequency1;
25 break;
26 case 2:
27 ++frequency2;
28 break;
29 case 3:
30 ++frequency3;
31 break;
32 case 4:
33 ++frequency4;
34 break;
35 case 5:
36 ++frequency5;
37 break;
38 case 6:
39 ++frequency6;
40 break;
41 }
42 }
43
When the controlling expression, face,
matches a case label, the respective
frequency variable is incremented.
25.
RollDie.html
(3 of 3)
44document.writeln( "<table border = "1"" +
45 "width = "50%">" );
46 document.writeln( "<thead><th>Face</th>" +
47 "<th>Frequency<th></thead>" );
48 document.writeln( "<tbody><tr><td>1</td><td>" +
49 frequency1 + "</td></tr>" );
50 document.writeln( "<tr><td>2</td><td>" + frequency2 +
51 "</td></tr>" );
52 document.writeln( "<tr><td>3</td><td>" + frequency3 +
53 "</td></tr>" );
54 document.writeln( "<tr><td>4</td><td>" + frequency4 +
55 "</td></tr>" );
56 document.writeln( "<tr><td>5</td><td>" + frequency5 +
57 "</td></tr>" );
58 document.writeln( "<tr><td>6</td><td>" + frequency6 +
59 "</td></tr></tbody></table>" );
60 // -->
61 </script>
62
63 </head>
64 <body>
65 <p>Click Refresh (or Reload) to run the script again</p>
66 </body>
67 </html>
The results of rolling the die
600 times are displayed in a
table.
09/30/15 Š ReemAl-Attas 27
Example: Game of Chance
īŦCraps
īĄ Click Roll Dice
īĄ Text fields show rolls, sum and point
īĄ Status bar displays results
28.
09/30/15 Š ReemAl-Attas 28
Example: Game of Chance
īŦ Uses XHTML forms
īĄ Gather multiple inputs at once
īĄ Empty action attribute
īĄ name attribute allows scripts to interact with form
īŦ Event handling and event-driven programming
īĄ Assign a function to an event
īĄ Onclick
īŦ Constants
īĄ Variable that cannot be modified
īĄ Part of many languages, not supported in JavaScript
īŦ Name âconstantâ variables with all capital letters
īĄ Make values easier to remember/change
29.
09/30/15 Š ReemAl-Attas 29
Example: Game of Chance
īŦChanging properties
īĄ Access with dot (.) notation
īĄ value property of text fields
īĄ status property of window
30.
1 <?xml version= "1.0"?>
2 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
3 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
4
5 <!-- Fig. 10.6: Craps.html -->
6 <!-- Craps Program -->
7
8 <html xmlns = "http://www.w3.org/1999/xhtml">
9 <head>
10 <title>Program that Simulates the Game of Craps</title>
11
12 <script type = "text/javascript">
13 <!--
14 // variables used to test the state of the game
15 var WON = 0, LOST = 1, CONTINUE_ROLLING = 2;
16
17 // other variables used in program
18 var firstRoll = true, // true if first roll
19 sumOfDice = 0, // sum of the dice
20 myPoint = 0, // point if no win/loss on first roll
21 gameStatus = CONTINUE_ROLLING; // game not over yet
22
31.
23 // processone roll of the dice
24 function play()
25 {
26 if ( firstRoll ) { // first roll of the dice
27 sumOfDice = rollDice();
28
29 switch ( sumOfDice ) {
30 case 7: case 11: // win on first roll
31 gameStatus = WON;
32 // clear point field
33 document.craps.point.value = "";
34 break;
35 case 2: case 3: case 12: // lose on first roll
36 gameStatus = LOST;
37 // clear point field
38 document.craps.point.value = "";
39 break;
40 default: // remember point
41 gameStatus = CONTINUE_ROLLING;
42 myPoint = sumOfDice;
43 document.craps.point.value = myPoint;
44 firstRoll = false;
45 }
46 }
If the value of firstRoll is true, then function
rollDice is called.
If function rollDice returns a value of 7
or 11, the player wins and the break
statement causes program control
proceeds to the first line after the switch
structure.
If function rollDice returns a 2, 3 or 12, the
player loses and the break statement causes
control to proceed to first line after the switch
structure.
32.
47 else {
48sumOfDice = rollDice();
49
50 if ( sumOfDice == myPoint ) // win by making point
51 gameStatus = WON;
52 else
53 if ( sumOfDice == 7 ) // lose by rolling 7
54 gameStatus = LOST;
55 }
56
57 if ( gameStatus == CONTINUE_ROLLING )
58 window.status = "Roll again";
59 else {
60 if ( gameStatus == WON )
61 window.status = "Player wins. " +
62 "Click Roll Dice to play again.";
63 else
64 window.status = "Player loses. " +
65 "Click Roll Dice to play again.";
66
67 firstRoll = true;
68 }
69 }
70
If the value returned by function rollDice
equals the value of variable myPoint, the player
wins because the point has been reached.
If the values returned by function rollDice
equals 7, the player loses.
window method status displays a
message in the status bar of the browser.
If the value of firstRoll is false,
function rollDice is called to see if the
point has been reached.
33.
Craps.html
(4 of 5)
71// roll the dice
72 function rollDice()
73 {
74 var die1, die2, workSum;
75
76 die1 = Math.floor( 1 + Math.random() * 6 );
77 die2 = Math.floor( 1 + Math.random() * 6 );
78 workSum = die1 + die2;
79
80 document.craps.firstDie.value = die1;
81 document.craps.secondDie.value = die2;
82 document.craps.sum.value = workSum;
83
84 return workSum;
85 }
86 // -->
87 </script>
88
89 </head>
Function rollDice is called to simulate
the rolling of two dice on the craps table.
Methods random and floor are used to
generate the values for the two dice.
Referencing the names of form elements
in the XHTML document, the values of
the dice are placed in their respective
form fields.
34.
Craps.html
(5 of 5)
90<body>
91 <form name = "craps" action = "">
92 <table border = "1">
93 <caption>Craps</caption>
94 <tr><td>Die 1</td>
95 <td><input name = "firstDie" type = "text" />
96 </td></tr>
97 <tr><td>Die 2</td>
98 <td><input name = "secondDie" type = "text" />
99 </td></tr>
100 <tr><td>Sum</td>
101 <td><input name = "sum" type = "text" />
102 </td></tr>
103 <tr><td>Point</td>
104 <td><input name = "point" type = "text" />
105 </td></tr>
106 <tr><td><input type = "button" value = "Roll Dice"
107 onclick = "play()" /></td></tr>
108 </table>
109 </form>
110 </body>
111 </html>
35.
09/30/15 Š ReemAl-Attas 35
Example: Game of Chance
A text XHTML GUI component
A button XHTML GUI component
Browserâs status bar
09/30/15 Š ReemAl-Attas 38
Another Example: Random Image
Generator
īŦRandomly selecting an image
īĄ Images have integer names (i.e., 1.gif,
2.gif, âĻ, 7.gif)
īĄ Generate random number in proper range
īĄ Update src property
39.
RandomPicture.html
(1 of 1)
1<?xml version = "1.0"?>
2 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
3 "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
4
5 <!-- Fig. 10.7: RandomPicture.html -->
6 <!-- Randomly displays one of 7 images -->
7
8 <html xmlns = "http://www.w3.org/1999/xhtml">
9 <head>
10 <title>Random Image Generator</title>
11
12 <script type = "text/javascript">
13 <!--
14 document.write ( "<img src = "" +
15 Math.floor( 1 + Math.random() * 7 ) +
16 ".gif" width = "105" height = "100" />" );
17 // -->
18 </script>
19
20 </head>
21
22 <body>
23 <p>Click Refresh (or Reload) to run the script again</p>
24 </body>
25 </html>
Inserting a random number into the imageâs src
property with document.write and Math.random
40.
09/30/15 Š ReemAl-Attas 40
Another Example: Random Image
Generator
41.
09/30/15 Š ReemAl-Attas 41
Scope Rules
īŦScope
īĄ Portion of program where identifier can be
referenced
īĄ Types of Scope:
īŦ Global
īŦ Local: inside function
âĸ Identifiers exist only between opening and closing
braces
âĸ Local variables hide global variables
42.
09/30/15 Š ReemAl-Attas 42
Scope Rules
īŦScope demonstration
īĄ Global variable x initialized to 1
īĄ start has local variable x initialized to 5
īĄ functionA has local variable x initialized to
25
īĄ functionB has no local variable x
īĄ Observe output of each function
43.
1 <?xml version= "1.0"?>
2 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
3 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
4
5 <!-- Fig. 10.8: scoping.html -->
6 <!-- Local and Global Variables -->
7
8 <html xmlns = "http://www.w3.org/1999/xhtml">
9 <head>
10 <title>A Scoping Example</title>
11
12 <script type = "text/javascript">
13 <!--
14 var x = 1; // global variable
15
16 function start()
17 {
18 var x = 5; // variable local to function start
19
20 document.writeln( "local x in start is " + x );
21
22 functionA(); // functionA has local x
23 functionB(); // functionB uses global variable x
24 functionA(); // functionA reinitializes local x
25 functionB(); // global variable x retains its value
To begin the program, variable x is initialized to 1.
Function start changes the value of x to 5.
44.
Scoping.html
(2 of 3)
26
27document.writeln(
28 "<p>local x in start is " + x + "</p>" );
29 }
30
31 function functionA()
32 {
33 var x = 25; // initialized each time
34 // functionA is called
35
36 document.writeln( "<p>local x in functionA is " +
37 x + " after entering functionA" );
38 ++x;
39 document.writeln( "<br />local x in functionA is " +
40 x + " before exiting functionA" + "</p>" );
41 }
42
Function functionA changes the value of x to 25.
The value of x is incremented.
45.
Scoping.html
(3 of 3)
43function functionB()
44 {
45 document.writeln( "<p>global variable x is " + x +
46 " on entering functionB" );
47 x *= 10;
48 document.writeln( "<br />global variable x is " +
49 x + " on exiting functionB" + "</p>" );
50 }
51 // -->
52 </script>
53
54 </head>
55 <body onload = "start()"></body>
56 </html>
Function functionB multiplies the value of x by 10.
09/30/15 Š ReemAl-Attas 47
Recursion
īŦRecursive functions
īĄ Call themselves
īŦ Part of return statement
īĄ Must have base case
īŦ Simplest case of problem
īŦ Returns value rather than calling itself
īĄ Each recursive call simplifies input
īŦ When simplified to base case, functions return
48.
09/30/15 Š ReemAl-Attas 48
Recursion
īŦFactorials
īĄ Product of calculation n ¡ (n - 1) ¡ (n - 2) ¡ âĻ Âˇ 1
īĄ Iterative approach:
var factorial = 1;
for (var counter = number; counter >= 1; --counter)
factorial *= counter;
īĄ Note each factor is one less than previous
factor
īŦ Stops at 1: base case
īŦ Perfect candidate for recursive solution
49.
09/30/15 Š ReemAl-Attas 49
Recursion
5!
5 * 4!
4 * 3!
3 * 2!
2 * 1!
1
5!
5 * 4!
4 * 3!
3 * 2!
2 * 1!
1
(a) Procession of recursive calls. (b) Values returned from each recursive call.
5! = 5 * 24 = 120 is returned
4! = 4 * 6 = 24 is returned
2! = 2 * 1 = 2 is returned
3! = 3 * 2 = 6 is returned
1 returned
Fig. 10.10 Recursive evaluation of 5!.
Final value = 120
50.
1 <?xml version= "1.0"?>
2 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
3 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
4
5 <!-- Fig. 10.11: FactorialTest.html -->
6 <!-- Recursive factorial example -->
7
8 <html xmlns = "http://www.w3.org/1999/xhtml">
9 <head>
10 <title>Recursive Factorial Function</title>
11
12 <script language = "javascript">
13 document.writeln( "<h1>Factorials of 1 to 10</h1>" );
14 document.writeln(
15 "<table border = '1' width = '100%'>" );
16
17 for ( var i = 0; i <= 10; i++ )
18 document.writeln( "<tr><td>" + i + "!</td><td>" +
19 factorial( i ) + "</td></tr>" );
20
21 document.writeln( "</table>" );
22
Calling function factorial and passing
it the value of i.
51.
23 // Recursivedefinition of function factorial
24 function factorial( number )
25 {
26 if ( number <= 1 ) // base case
27 return 1;
28 else
29 return number * factorial( number - 1 );
30 }
31 </script>
32 </head><body></body>
33 </html>
Variable number gets the value of variable i.
Call to function factorial and passing it 1
less than the current value of number .
09/30/15 Š ReemAl-Attas 53
Example of Using Recursion: The
Fibonacci Series
īŦ GUI input setup:
īĄ All user inputs (if there are any) are defined by HTML
INPUT tag
<INPUT NAME = âinputNameâ TYPE = âtextâ>
īĄ Enter as many inputs as you want, giving each an
applicable name
īĄ The form button component allows the user to send his
inputted information to the server
<INPUT TYPE = âbuttonâ VALUE = âbuttonLabelâ
ONCLICK = âjavaScriptFunctionCallâ>
īĄ Function called in ONCLICK element is executed when
event is executed
īĄ Function called in GUI will execute using FORM elements
as its parameters
54.
09/30/15 Š ReemAl-Attas 54
Example of Using Recursion: The
Fibonacci Series (II)
īŦ Fibonacci series:
īĄ 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89âĻ
īĄ Begins with 0 and 1
īĄ Each number is sum of pervious two numbers
īŦ May be defined recursively as:
īĄ fibonacci( 0 ) = 0
īĄ fibonacci( 1 ) = 1
īĄ fibonacci( n ) = fibonacci( n - 1 ) + fibonacci( n - 2)
īŦ Avoid programs with Fibonacci-style calls
īĄ Results in exponential âexplosionâ of calls
55.
1 <!DOCTYPE htmlPUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
2 <HTML>
3 <!-- Fig. 11.10: FibonacciTest.html -->
4
5 <HEAD>
6 <TITLE>Recursive Fibonacci Function</TITLE>
7
8 <SCRIPT LANGUAGE = "JavaScript">
9 // Event handler for button HTML component in myForm
10 function getFibonacciValue()
11 {
12 var value = parseInt( document.myForm.number.value );
13 window.status =
14 "Calculating Fibonacci number for " + value;
15 document.myForm.result.value = fibonacci( value );
16 window.status = "Done calculating Fibonacci number";
17 }
18
19 // Recursive definition of function fibonacci
20 function fibonacci( n )
21 {
22 if ( n == 0 || n == 1 ) // base case
23 return n;
24 else
25 return fibonacci( n - 1 ) + fibonacci( n - 2 );
26 }
27 </SCRIPT>
28
29 </HEAD>
30
56.
34 <TR><TD>Enter aninteger</TD>
35 <TD><INPUT NAME = "number" TYPE = "text"></TD>
36 <TD><INPUT TYPE = "button" VALUE = "Calculate"
37 ONCLICK = "getFibonacciValue()"</TR>
38 <TR><TD>Fibonacci value</TD>
39 <TD><INPUT NAME = "result" TYPE = "text"></TD></TR>
40 </TABLE>
41</FORM></BODY>
42</HTML>
31<BODY>
32<FORM NAME = "myForm">
33 <TABLE BORDER = "1">
09/30/15 Š ReemAl-Attas 58
Example of Using Recursion: The
Fibonacci Series
Set of Recursive Calls to Function fibonacci
return 1 return 0
f( 1 )return f( 0 )+ return 1
f( 2 )return f( 1 )+
f( 3 )
59.
09/30/15 Š ReemAl-Attas 59
Recursion vs. Iteration
īŦ Iteration
īĄ Explicitly uses repetition structures to achieve
result
īĄ Terminates when loop-continuation condition fails
īĄ Often faster than recursion
īŦ Recursion
īĄ Repeats through function calls
īĄ Terminates when base case reached
īĄ Slower due to function call overhead
īŦ Each call generates new copy of local variables
īĄ Easy to read and debug when modeling problem
with naturally recursive solution
60.
09/30/15 Š ReemAl-Attas 60
Assignment 8
īŦ 1) Exercise # 10.22:
īŦ A & B
īŦ C (Bonus)
Due Date for A # 8:
īŦ Next Monday before
your lecture.