Transcript Fibonacci

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
2
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
3
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 + " ");
4
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
5
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
6
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
7
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;
}
8
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;
}
9
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( );
10
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( );
11
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
12
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( );
13
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
14
The “box” our program goes in
public class Fibonacci {
public static void main(String args[ ]) {
(code goes here)
}
}
15
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( );
}
}
16
Where is it?

When we run Eclipse, we declare some folder to be a workspace


To create a new “program” in Eclipse, we must first create a
project to hold all our classes



All our projects go into this (or some other) workspace
Eclipse will create a directory with the same name as the project
You should not rename this directory
When you create a class in Eclipse, such as Fibonacci, it will be
put in a file with the same name but with the .java extension—
for example, Fibonacci.java


You must not change the name of this file!
Java uses the file names to find the classes it needs
17
The End
“Always code as if the guy who ends up maintaining
your code will be a violent psychopath who knows
where you live.”
--Martin Golding
18