一题看递归、递推与动态规划
第 N 个泰波那契数
泰波那契序列 Tn 定义如下:
T0 = 0, T1 = 1, T2 = 1, 且在 n >= 0 的条件下 Tn+3 = Tn + Tn+1 + Tn+2
给你整数 n,请返回第 n 个泰波那契数 Tn 的值。
例子
输入:n = 4
输出:4
解释:
T_3 = 0 + 1 + 1 = 2
T_4 = 1 + 1 + 2 = 4
- 分析
最先想到公式为Tn = T(n-3) + T(n-2) + T(n-1)
最简单的就是递归
1 | func tribonacci(n int) int { |
提交以后发现超时,超时的原因递归计算了很多重复性的工作,所以需要更加简单的方式
递推
递推其实我们只要存储最近三个数就可以计算出下一个数了
1 | func tribonacci1(n int) int { |
缓存+动态规划
这种方式就是用一个数组去缓存第n个位置的具体值是啥,然后需要的时候直接取出来,和递推方式如出一辙,只不过是存储了值
1 | func tribonacci2(n int) int { |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 机壳!
评论