优化前

package myJavaStudy;

import java.util.Scanner;

public class Main {
	static int count = 0;

	public static void main(String[] args) {
		System.out.println(fib(20));
		System.out.println("共执行" + count + "次");
	}

	private static int fib(int i) {
		// TODO Auto-generated method stub
		count++;
		if (i == 1 || i == 2) {
			return 1;
		}
		return fib(i - 1) + fib(i - 2);
	}
}

优化后

package myJavaStudy;

import java.util.Scanner;

public class Main {
	static int count = 0;
	static int array[] = new int[25];

	public static void main(String[] args) {
		System.out.println(fib(20));
		System.out.println("共执行" + count + "次");
	}

	private static int fib(int i) {
		// TODO Auto-generated method stub
		count++;
		if (i == 1 || i == 2) {
			array[i] = 1;
			return array[i];
		}
		// 说明值被记录了的,因为默认是0
		if (array[i] != 0) {
			return array[i];
		}
		array[i] = fib(i - 1) + fib(i - 2);
		return array[i];
	}
}