import java.awt.*; import java.awt.event.*; import java.math.*; import javax.swing.*; public class Fib { public static void main(String[] args) { JFrame frame = new JFrame("Fibonacci Numbers"); frame.setVisible(false); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); JComponent c = new JPanel(new BorderLayout()); frame.setContentPane(c); final JTextArea t = new JTextArea(); c.setPreferredSize(new Dimension(600,400)); JScrollPane sp = new JScrollPane(t); c.add(sp, BorderLayout.CENTER); final JSlider slider = new JSlider(JSlider.VERTICAL,1,200,7); slider.setPaintLabels(true); slider.setMajorTickSpacing(10); slider.setSnapToTicks(true); slider.setMinorTickSpacing(1); slider.setPaintTicks(true); JButton but = new JButton("Start"); c.add(slider, BorderLayout.EAST); c.add(but, BorderLayout.SOUTH); frame.pack(); frame.setVisible(true); but.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { new Thread(new Runnable() { public void run() { int n = slider.getValue(); t.setText("fibLinear("+n+") = "); t.append(fibFast(n)+"\n"); if (n < 40) { t.append("fibNonLinear("+n+") = "); t.append(fib(n).toString()); } } }).start(); } }); } private static BigInteger fib(int n) { if (n <= 1) { return BigInteger.ONE; } else { return fib(n-1).add(fib(n-2)); } } private static BigInteger fibFast(int n) { BigInteger fibi = BigInteger.ONE; BigInteger fibii = fibi; BigInteger tmp; for (int i=0; i