对于理解动态规划来说,最简单的题目还是求斐波那切数列的第i个值。很多资料都把它作为一个印子,以此来介绍动态规划的基本定义。
不过也有些书认为菲波那切数列过于简单,以致于不能让读者感受到动态规划的优美之处,所以选择了其他的例子。
不管怎么说,我们这里还是以菲波那切数列来作为第一个印子,代码如下所示:
package com.mengzhidu.teach.algorithm.dp.demo.line;
/**
* 使用动态规划的方式来求解斐波那切数列
* 这里对小于0的数字直接返回-1
* 对于0这一项,不同的书籍似乎规定不同,有的没有定义0的对应值,有的则定义为0
* 我们这里统一返回0
*/
public class FibonacciDemo1 {
public static void main(String[] args) {
int result = fibonacci(6);
System.out.println("结果为:" + result);
}
private static int fibonacci(int n) {
if (n < 1) {
return 0;
}
if (n == 1 || n == 2) {
return 1;
}
int[] result = new int[n];
result[0] = 1;
result[1] = 1;
for (int i = 2; i < n; i++) {
result[i] = result[i-1] + result[i-2];
}
return result[n-1];
}
}
对于使用动态规划求解菲波那切数列,就介绍到这里啦。