问题描述
斐波那契数 (通常用 F(n)
表示)形成的序列称为 斐波那契数列 。该数列由 0
和 1
开始,后面的每一项数字都是前面两项数字的和。
示例
分析
根据题目要求可以发现从0,1之后,每个数字都可以由前面两项数字之和计算出来。因此这就是一个最简单的动态规划问题,动态规划的递推公式就是Fn=(Fn - 1) + (Fn - 2)。那么可以创建一个动态规划数组,前两项为0和1。从下标2开始每个数组元素的值都是数组前两个元素的和,最后输出数组最大下标的值就是解。
代码实现
package org.kk.java.april;
/**
* <p>
* 斐波那契数
* <strong>斐波那契数</strong> (通常用 F(n) 表示)形成的序列称为 <strong>斐波那契数列</strong> 。
* 该数列由 0 和 1 开始,后面的每一项数字都是前面两项数字的和。
* </P>
*
* @author Kk
* @since 2022/4/18 15:05
*/
public class Q509 {
public static void main(String[] args) {
System.out.println(fib(0));
}
public static int fib(int n) {
int[] nums = new int[n + 1];
if (n < 1) return n; //避免越界
nums[0] = 0;
nums[1] = 1;
for (int i = 2; i < nums.length; i++) {
nums[i] = nums[i - 1] + nums[i - 2];
}
return nums[n];
}
}