遵循伪码,计算第n个斐波纳契数:
int fibonacci(int n)
{
if (n == 0){
print(0)
return 0
}
if (n == 1)
{
print(1)
return 1
}
return fibonacci(n - 1) + fibonacci(n - 2)
}
如果调用fibonacci(3),则会发生以下情况:
- 斐波那契(3)称为斐波纳契(2)和斐波那契(1)(第一次召唤)。
- 斐波纳契(2)称为斐波那契(1)(第二次调用)和斐波那契(0)。
- 第二次调用斐波那契(1)打印1并返回1.
- fibonacci(0)打印0并返回0.
- 斐波纳契(2)得到斐波那契(1)和斐波那契(0)的结果并返回1.
- 第一次调用斐波那契(1)打印1并返回1.
- 斐波那契(3)得到斐波那契(2)和斐波那契(1)的结果并返回2.
总共会打印1次,打印0次。
目的是知道给定整数N将打印0和1的次数。
INPUT
第一行包含一个整数T
,表示测试用例的数量。
下一行T
行包含整数N
。
OUTPUT 对于每个测试用例,打印一行输出,其中包含由空格分隔的2个整数。第一个整数是打印0的次数。第二个整数是打印1的次数。
约束
1 <= T <= 50
0 <= N <= 40
SAMPLE INPUT
2
0
3
SMAPLE OUTPUT
1 0
1 2
代码
public class Fibonacci {
/**
* @param args
*/
static int zero =0,one = 0;
public static void main(String[] args) {
// TODO Auto-generated method stub
int[] input = readInput();
for(int i =0; i < input.length;++i) {
System.out.println(getOutput(input[i]));
}
}
public static int[] readInput() {
BufferedReader bufferReader = new BufferedReader(new InputStreamReader(System.in));
String temp;
int[] input = null;
try {
temp =bufferReader.readLine();
int counter = Integer.parseInt(temp);
input = new int[counter];
for(int i =0 ; i < counter ;++i) {
input[i] =Integer.parseInt(bufferReader.readLine());
}
} catch (IOException e) {
e.printStackTrace();
}
return input;
}
public static String getOutput(int number) {
//System.out.println(fibonacci(number));
return zero+" "+one;
}
public static int fibonacci(int n) {
if (n == 0) {
//System.out.println(0);
++zero;
return 0;
}
if (n == 1) {
//System.out.println(1);
++one;
return 1;
}
return fibonacci(n - 1) + fibonacci(n - 2);
}
}
这适用于第一个测试用例,但后续测试用例无效。
答案 0 :(得分:1)
我认为你需要在调用getOutput之前重置零和一的值。
for(int i =0; i < input.length;++i) {
zero = 0;
one = 0;
System.out.println(getOutput(input[i]));
}