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】可以直接用!!
这个算法很强!!
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值