/* ==================================================================
* Created [2009-4-27 下午11:32:55] by Jon.King
* ==================================================================
* TSS
* ==================================================================
* mailTo:jinpujun@hotmail.com
* Copyright (c) Jon.King, 2009-2012
* ==================================================================
*/
package com.jinhe.tss.core.cachepool.proxy.profier;
/**
* <p>
* FibonacciTest.java
* </p>
*
* @author 金普俊 2006-10-12
*
* 菲波那契(Fibonacci)数列的几种解法
*/
public class TestFibonacci {
public static void main(String[] args){
testProxy();
testCGLIB();
}
public static void testProxy() {
Fibonacci f = (Fibonacci) ProxyProfiler.frofiler(new FibonacciImpl());
System.out.println(f.recursive(32)); //拦截递归调用得方法只能拦截住第一次
System.out.println(f.fibArray(1000000));
System.out.println(f.fib(1000000));
}
public static void testCGLIB(){
FibonacciImpl f = (FibonacciImpl)new CGLIBProfiler().getProxy(FibonacciImpl.class);
System.out.println(f.recursive(12));
System.out.println(f.fibArray(1000000));
System.out.println(f.fib(1000000));
}
public interface Fibonacci {
/** 递归 */
long recursive(int index);
/** 数组 */
long fibArray(int index);
/** 循环 */
long fib(int index);
}
public static class FibonacciImpl implements Fibonacci{
public long recursive(int index) {
if (index <= 2) {
return 1;
} else {
return this.recursive(index - 1) + recursive(index - 2);
}
}
public long fibArray(int index) {
long[] array = new long[index];
if (index == 1) {
array[0] = 1;
}
if (index >= 2) {
array[0] = 1;
array[1] = 1;
}
if (index > 2) {
for (int i = 2; i < array.length; i++) {
array[i] = array[i - 2] + array[i - 1];
}
}
return array[index - 1];
}
public long fib(int index) {
long sum = 1, x = 1;
if (index > 2) {
for (int i = 0; i < index - 2; i++) {
sum += x;
x = sum - x;
}
}
return sum;
}
}
}