机试题:递推数列

机试题:递推数列

我是这样写的:

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]);
	}

	

}

改成这样以后,顺利通过了。