public class Dg { public static void main(String[] args) { Scanner input=new Scanner(System.in); System.out.print("请输入:"); int num=input.nextInt(); System.out.println("结果是:"+result(num)); } public static int result(int num){
int m1=1; int m2=1; int result=1; for (int i = 2; i < num; i++) { result=m1+m2; m1=m2; m2=result; } return result; } }
刚才忘记说了,在Dg的方法中,为何限制了count[]的边界?假如输入month = 101怎么办?存在count[101]么?
n=2,f[n]=1;
n>=3,F[n]=F[n-1]+F[n-2];这是大概思想;
我特意去敲了下代码:有几行是这样的:
public static int Dg(int num){
int[] count=new int[100];
if(num<2){
count[0]=1;
count[1]=1;
}else{
count[num]=count[num-1]+count[num-2];
}
return count[num];
}其中,如果你输入的num大于2,则不执行if语句中的count[0]=1;
count[1]=1;
直接执行的else语句。而数组初始化count【100】全是0(避免空指针),所以你不管输入大于2的什么数,返回值都是0;
public class test_01{
public static int dg(int num)
{
if(num<3)
{
count[0]=1;
count[1]=1;
count[2]=1;
}
else
count[num]=dg(num-1)+dg(num-3);
return count[num];
}
public static void main(String[] args)
{
Scanner sc=new Scanner(System.in);
System.out.print("请输入月份:");
int month=sc.nextInt();
System.out.print("兔子的总数是:"+dg(month)+"对");
}
static int count[]=new int[100];
}楼主的month-=month的运算结果始终都是0,而且根据楼主这道题的描述,小兔子三个月后才能生一对小兔子,所以count[num]应该等于dg[num-1]+dg[num-3];if语句也要相应的变化。
你这么改,还是不对吧。
public static void main(String[] args) {
Scanner input=new Scanner(System.in);
System.out.print("请输入:");
int num=input.nextInt();
System.out.println("结果是:"+result(num));
}
public static int result(int num){
int m1=1;
int m2=1;
int result=1;
for (int i = 2; i < num; i++) {
result=m1+m2;
m1=m2;
m2=result;
}
return result;
}
}