public class c2019 {
public static void main(String[] args) {
long[] arr = new long[20190324];
System.out.println(solution(arr,20190324));
}
public static long solution(long[] arr,long n) {
arr[1] = arr[2] = arr[3] = 1;
if(n<=3) {
return 1;
}
return solution(arr,arr[(int)(n-1)]) + solution(arr,arr[(int)(n-2)]) + solution(arr,arr[(int)(n-3)]);
}
}
求大家解答,这段代码哪里有问题
不能这样做,要用循环语句,不断的变化前4个变量的值
建议改成迭代的方式来做,因为实际上只需要用到 4 个变量就好了。然后 4 个变量的值相当于在不断的向后移动。
//这个计算是正常的,但数组太大,堆栈溢出了。
public static void main(String[] args) {
long[] arr = new long[20190324];
arr[0] = arr[1] = arr[2] = 1;
arr[3]=3;
// System.out.println(solution(arr,4));
//测试
int n = 20190324;
for(int i=4;i<n;i++) {
arr[i] = arr[i-1] + arr[i-2] + arr[i-3];
}
System.out.println(arr[n-1]);
}
public static long solution(long[] arr,int n) {
if(n<=3) {
return 1;
}else if (n==20190323){
return arr[n-1] % 10000;
}else {
arr[n] = arr[n-1]+arr[n-2]+arr[n-3];
return solution(arr,n+1);
}
}
试下这段代码吧
public static void main(String[] args) {
int [] arr = new int[20190324];
arr[0] = 1;
arr[1] = 1;
arr[2] = 1;
for (int i = 0; i <arr.length; i++) {
if(i>2){
arr[i] = arr[i-1]+arr[i-2]+arr[i-3];
}
}
System.out.println("第20190324="+arr[20190323]);
}
您好,我是有问必答小助手,你的问题已经有小伙伴为您解答了问题,您看下是否解决了您的问题,可以追评进行沟通哦~
如果有您比较满意的答案 / 帮您提供解决思路的答案,可以点击【采纳】按钮,给回答的小伙伴一些鼓励哦~~
ps:问答VIP仅需29元,即可享受5次/月 有问必答服务,了解详情>>>https://vip.csdn.net/askvip?utm_source=1146287632