java - 计算斐波那契数列中终止条件的执行情况

标签 java algorithm fibonacci

以下伪代码,计算第 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),则会发生以下情况:

  • fibonacci(3) calls fibonacci(2) and fibonacci(1) (the first call).
  • fibonacci(2) calls fibonacci(1) (the second call) and fibonacci(0).
  • The second call of fibonacci(1) prints 1 and returns 1.
  • fibonacci(0) prints 0 and returns 0.
  • fibonacci(2) gets the results of fibonacci(1) and fibonacci(0) and returns 1.
  • The first call of fibonacci(1) prints 1 and returns 1.
  • fibonacci(3) gets the results of fibonacci(2) and fibonacci(1) and returns 2.

总共打印两次1,打印一次0。

目标是知道对于给定的整数 N,将打印多少次 0 和 1。

输入 第一行包含一个整数T,表示测试用例的数量。 接下来的 T 行包含一个整数 N

输出 对于每个测试用例,打印一行输出,其中包含 2 个由空格分隔的整数。第一个整数是打印 0 的次数。第二个整数是打印 1 的次数。

约束

1 <= T <= 50
0 <= N <= 40

样本输入

2

0

3 

SMAPLE 输出

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

这对第一个测试用例工作正常,但对后续测试用例失败。

最佳答案

我认为您需要在调用 getOutput 之前重置零和一的值。

    for(int i =0; i < input.length;++i) {
        zero = 0;
        one = 0;
        System.out.println(getOutput(input[i]));
    }

关于java - 计算斐波那契数列中终止条件的执行情况,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50073564/

相关文章:

java - 值(value)比较让我困惑,无法正常工作

java - Windows 上 JavaFX 中 SwingNode 的模糊渲染

python - 网格置换算法 - 固定行顺序

algorithm - k 阶斐波那契数列

java - 如何使用spring通过null查询实体属性?

java - 通过本地接口(interface)从 war 访问 ejb in ear

python - 如何使用 numpy 对 Floyd-Steinberg 的抖动算法进行矢量化?

javascript - JavaScript 中的最近对算法

c - 无法正确打印递归斐波那契数列

list - 如何判断一个数字是否在斐波那契数列中