`

Tribonacci 数字序列的计算

阅读更多
/**  
 * Tribonacci 数字序列的计算。<br>  
 * 规则是T(n) = T(n - 1) + T(n - 2) + T(n -3)<br>  
 * 其中T(0) = T(1) = 1,T(2) = 2<br>  
 * 不考虑整数的溢出问题。  
 *   
 * @author 老紫竹(java2000.net, laozizhu.com)  
 */  
public class TribonacciNumber {   
  
  public static void main(String[] args) {   
    TribonacciNumber tn = new TribonacciNumber();   
    int number = 32;   
    long begin = System.currentTimeMillis();   
    System.out.println(tn.calTribonacci(number));   
    long end = System.currentTimeMillis();   
    System.out.println(end - begin);   
  
    begin = System.currentTimeMillis();   
    System.out.println(tn.calTribonacciCache(number));   
    end = System.currentTimeMillis();   
    System.out.println(end - begin);   
  
  }   
  
  /**  
   * 普通算法,有重复计算。  
   *   
   * @param n  
   * @return  
   */  
  public int calTribonacci(int n) {   
    if (n == 0) {   
      return 1;   
    }   
    if (n == 1) {   
      return 1;   
    }   
    if (n == 2) {   
      return 2;   
    }   
    return calTribonacci(n - 1) + calTribonacci(n - 2) + calTribonacci(n - 3);   
  }   
  
  // 缓冲区   
  private int[] nums = new int[3];   
  {   
    nums[0] = 1;   
    nums[1] = 1;   
    nums[2] = 2;   
  }   
  // 当前最大的缓冲数字   
  private int maxCached = 2;   
  
  /**  
   * 带缓冲的计算,减少了大量的重复计算。<br>  
   * 效率极大提高。  
   *   
   * @param n  
   * @return  
   */  
  public int calTribonacciCache(int n) 
{   
    // 小于的,直接用缓冲   
    if (n <= maxCached) {   
      return nums[n % 3];   
    }   
    // 否则计算   
    nums[n % 3] = calTribonacciCache(n - 3) + calTribonacciCache(n - 2) + calTribonacciCache(n - 1);   
    maxCached = n;   
    return nums[n % 3];   
  }   
}  


这个算法的核心思想是在于:
把num[n]存储了计算的值!所以以后用时就不用再  计算了!!

计算了 T[5]那么 计算T【6】可以直接用!!
这个算法很强!!
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics