下列代码的两个函数分别用动态规划和递归解题。
动态规划思想就不在此处赘述,想看动态规划思想的可以去https://blog.csdn.net/zw6161080123/article/details/80639932
然后递归是普通解法,就没什么好说的了。
直接上代码
public class Main {
public static void f1(int n){
long t = System.nanoTime();
int []arr = new int[n];
arr[0]=1;
arr[1]=arr[0]+1;
for(int i=2;i<n;++i)
arr[i]=arr[i-1]+arr[i-2];
System.out.println("f1:("+arr[n-1]+")"+(System.nanoTime()-t)+"ns");
}
public static int all = 0;
public static void s(int n){
if(n>0)
s(n-1);
if(n>1)
s(n-2);
if(n==0)
++all;
}
public static void f2(int n){
long t = System.nanoTime();
s(n);
System.out.println("f2:("+all+")"+(System.nanoTime()-t)+"ns");
}
public static void main(String[] args) {
// 每次只能跳一个或者两个台阶,跳到n层台阶上有几种方法
all = 0;
//12之前的最少耗时,递归赢,之后动态规划赢,且动态规划速度远超递归
//填入数值不少于2
f1(12);
f2(12);
}
}