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