Fibonacci Numbers A simple example of program design

advertisement
Fibonacci Numbers
A simple example of program design
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:
3
5
8
first = second;
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?
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;
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;
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