Hofstadters Q序列

时间:2014-09-24 04:58:11

标签: java loops recursion iteration sequences

我已经盯着这个差不多一个星期了,不知道如何实现java代码。 首先,我写了一个递归的Hofstadters Q序列来计算Hofstadter的Q序列中的第n个数,对于n≥1,如下所示 PS。 Hofstadters Q序列有点像Fibonacci序列,只是定义如下:

Q(1) = 1, Q(2) = 1, and
Q(n) = Q(n − Q(n − 1)) + Q(n − Q(n − 2)), for n > 2

public static int Hofstadters(int n)
  {
    int result;

    if (n < 3)
      result = 1;
    else
      result = Hofstadters(n - (Hofstadters(n-1))) + Hofstadters(n - (Hofstadters(n-2)));
    return result;
  }

这完全没问题。现在我被要求使用循环而不是递归来编写此代码,以及一个数组(在我从Q(1)到Q(n)计算它们时在序列中存储数字)。

我的想法是将Q(i)元素放入数组的位置i,从1到n。

我甚至不知道如何开始它。到目前为止,我只写了下面的代码,从那时起几乎一直盯着我的屏幕:

public static void QSequence(int n)
  {
    int result;
    int [] arr;
    int value;

    arr = new int [n-1];
    arr[0] = 1;
    arr[1] = 1;

    for(int count = 2; count< arr.length; count++)
    {
      //code
    }
  }

非常感谢任何帮助和提示,谢谢

1 个答案:

答案 0 :(得分:2)

应该有效:

package snippet;

public class Snippet {

    public static void main(String[] args) {
        System.out.println(QSequence(10));
    }

    public static int QSequence(int n) {
        int result;
        int[] arr;
        int value;

        arr = new int[n];
        arr[0] = 1;
        arr[1] = 1;

        for (int i = 2; i < arr.length; i++) {
            arr[i] = arr[i - arr[i - 1]] + arr[i - arr[i - 2]];
        }

        return arr[n - 1];
    }
}