Fibonacci Numbers A simple example of program design 26-Jul-16

advertisement
Fibonacci Numbers
A simple example of program design
26-Jul-16
Purpose of this presentation

The whole point of this presentation is to give you some
idea of how to put together the components we have so
far (declarations, assignments, if and while statements)
into a working program

The example we use is writing a program to compute
and display a Fibonacci sequence
Fibonacci sequences


A Fibonacci sequence is an infinite list of integers
The first two numbers are given


Usually (but not necessarily) these are 1 and 1
Each subsequent number is the sum of the two
preceding numbers:
1 1 2 3 5 8 13 21 34 55 89 144 ...

Let’s write a program to compute these
Starting the Fibonacci sequence

We need to supply the first two integers
int first = 1;
int second = 1;

We need to print these out:
System.out.print(first + " ");
System.out.print(second + " ");

We need to compute and print the next number:
int next = first + second;
System.out.print(next + " ");
Taking the next step

We need to compute and print the next number:
int next = first + second;
System.out.print(next + " ");

Now what?


We don't want to make up a lot more names
If we use a loop, we must reuse names
Preparing for another step

This computation gave us our third number:
int next = first + second;
System.out.print(next + " ");

The sequence so far is: first second next



To get another number, we need second + next
Variable first is no longer useful for anything
Let’s move values around so that first + second does
the job we need
Preparing to make many steps



We need to make these moves:
first second
next
first second
next
first second next
1
1
2
1
2
3
2
3
5
We can do it like this:
first = second;
3
5
8
second = next;
We can put these statements in a loop and do them as many times
as we please
The program so far
int first = 1;
int second = 1;
System.out.print(first + " ");
System.out.print(second + " ");
while ( ? ? ? ) { // when do we stop?
int next = first + second;
System.out.print(next + " ");
first = second;
second = next;
}
Deciding when to stop


Suppose we stop when we get to a number that’s 1000
or bigger
So we continue as long as the number is less than 1000:
while (next < 1000) { ... }

Question: is the final number printed greater than 1000
or less than 1000?

while (next < 1000) {
int next = first + second;
System.out.print(next + " ");
first = second;
second = next;
}
One other minor detail



We have been printing the numbers all on one line
We’ll get to 1000 quickly enough, so we won’t have a
terribly long line
For neatness’ sake, we really ought to end the line
(rather than hoping Java does it for us):
System.out.println( );
The program so far
int first = 1;
int second = 1;
System.out.print(first + " ");
System.out.print(second + " ");
while (next < 1000) { // oops--a bug
int next = first + second;
System.out.print(next + " ");
first = second;
second = next;
}
System.out.println( );
Fixing the bug

The first time we see the variable next, it’s in the test of
the while loop:



while (next < 1000) {
next hasn’t been given a value yet
next hasn’t even been declared!
Solution: declare next up with the other variables, and
give it some reasonable initial value
The (fixed) program so far
int first = 1;
int second = 1;
int next = 2;
System.out.print(first + " ");
System.out.print(second + " ");
while (next < 1000) {
next = first + second; // "int" was removed
System.out.print(next + " ");
first = second;
second = next;
}
System.out.println( );
Finishing up




We have the commands we need, but we do not
have a complete application
We need to put the commands into a method
We need to put the method into a class
The next slide shows the extra stuff we need, but
doesn’t explain it
The “box” our program goes in
public class Fibonacci {
public static void main(String args[ ]) {
(code goes here)
}
}
The complete final program
public class Fibonacci {
public static void main(String args[ ]) {
int first = 1;
int second = 1;
Our code
int next = 2;
System.out.print(first + " ");
System.out.print(second + " ");
while (next < 1000) {
next = first + second;
System.out.print(next + " ");
first = second;
second = next;
}
System.out.println( );
}
}
The End
Download