用递归或者递推
f(n)=f(n-1) +f(n-2) n>=2
当只有1个格子的时候 只有1种方式 f(1)=1
当有2个格子的时候 有2种方式 f(2)=2
递归条件结束就是 0<=n<=2时候 f(n)=n
public int f(int n){
if(n<=2){
return n;
}else{
return f(n-1)+f(n-2);
}
}
这个递归里面有很多重复的计算,比如说f(6)=f(5)+f(4) f(7)=f(6)+f(5)
这样f(5) 就重复计算了。
使用状态保存存起来。
public static void main(String[] args) {
int a=f(10);
System.out.println(a);
System.out.println("执行次数:"+count);
}
static int count=0;
static int arr[]=new int[100];
public static int f(int n){
count++;
if(n<=2){
return n;
}else{
int f1=0;
int f2=0;
if (arr[n-1]!=0){
f1=arr[n-1];
}else {
f1=f(n-1);
arr[n-1]=f1;
}
if (arr[n-2]!=0){
f2=arr[n-2];
}else {
f2=f(n-2);
arr[n-2]=f2;

这篇博客探讨了一个有N个格子的直线道路问题,每步可前进1格或2格。通过递归或递推公式解决到达终点的不同路径数。博主指出,当n=1时有1种方式,n=2时有2种方式,递推公式为f(n)=f(n-1)+f(n-2),并强调了递归计算中重复计算的问题,建议使用状态保存以提高效率。对于较大的n值,如n=40,不保存状态的执行次数远高于保存状态的情况,强调了优化递归的重要性。
最低0.47元/天 解锁文章

被折叠的 条评论
为什么被折叠?



