机试题:递推数列
我是这样写的:
import java.util.Scanner;
public class D_3_26_1 {
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner sc=new Scanner(System.in);
int a0=sc.nextInt();
int a1=sc.nextInt();
int p=sc.nextInt();
int q=sc.nextInt();
int k=sc.nextInt();
long result=fun(k,a0,a1,p,q);
System.out.println(result%10000);
}
private static long fun(int k, int a0, int a1, int p, int q) {
// TODO Auto-generated method stub
if(k==0)
return a0;
if(k==1)
return a1;
else
return p*fun(k-1,a0,a1,p,q)+q*fun(k-2,a0,a1,p,q);
}
}
在eclipse上测试用例答案是正确的
然而,在线编译报错了。。。
运行了很久才出结果。。。我觉得我不该递归。而且应该还有别的我没发现的错。
看了通过的代码。人家是用数组 很简单的操作
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner sc=new Scanner(System.in);
int a0=sc.nextInt();
int a1=sc.nextInt();
int p=sc.nextInt();
int q=sc.nextInt();
int k=sc.nextInt();
int a[]=new int[k+1];
a[0]=a0;
a[1]=a1;
for(int i=2;i<=k;i++)
{
a[i]=(p*a[i-1]+q*a[i-2])%10000;
}
System.out.println(a[k]);
}
}
改成这样以后,顺利通过了。