java代码实现案例一@[算法]
递归问题1
题面描述:
楼梯有n阶,可以一步上一阶、两阶或三阶,问有多少种不同的走法
由于答案很大,mod(1e9+7)输出,
输入数据:
一个正整数n,代表楼梯的阶数,n<=1000000
输出数据:
方案数
java代码实现:
解题思路:
1.将每次递归的次数存储,同样的子问题只需要计算一次就行,用方法countwaysdp的方法实现对于每个子问题需要行走步数的计算,从而实现对于每个问题只计算一次,不重复计算,最终实现计算所得的方案数。
2.当有n个台阶(n>3)时,我们缩小问题规模,可以这样想:最后是一步上1个台阶的话,之前上了n-1个台阶,走法为f(n-1)种,而最后是一步上2个台阶的话,之前上了n-2个台阶,走法为f(n-2)种,故而f(n)=f(n-1)+f(n-2)。列出的递归方程为:f(1)=1;f(2)=2;
具体代码:
import java.util.*;
public class Main {
public static int countwaysdp(int n,int dp[]) {
if(n<0) return 0;
if(n==0) return 1;
if(dp[n]>0) return dp[n];
else {
dp[n]=countwaysdp(n-1,dp)+countwaysdp(n-2,dp)+countwaysdp(n-3,dp); //否则 还需计算该数组
return dp[n];
}
}
public static void main(String args[]) {
Scanner sc=new Scanner(System.in);
int n=sc.nextInt();
int[] l1=new int[n+1];
int b=countwaysdp(n,l1);
System.out.println(b);
}
}
结语:
通过以上的递归方法实现了我们要解决的问题。

427

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



