在Java中创建递归序列?

时间:2016-12-18 20:38:40

标签: java algorithm recursion integer sequence

我想知道你怎么能写一个接受整数参数(n)的递归方法并写下以下序列:n,n-1,n-2,n-3,...,0,... - (n-3), - (n-2), - (n-1), - n。例如:5,4,3,2,1,0,-1,-2,-3,-4,-5

这个例子的基本情况是什么? 该方法将如何知道何时结束?

到目前为止,我有:

public static void createSequence(int n) {
	if (n== 0)
	    return;
	else{
	    System.out.println(n);
	    createSequence(n-1);
      }
  }

这只会创建一个正整数序列,如何修复此代码?

7 个答案:

答案 0 :(得分:2)

你只需要在递归调用后编写-n:

public static void createSequence(int n) {
    if (n == 0) {
        System.out.println(n);
        return;
    }
    else { 
        System.out.println(n);
        createSequence(n-1);
        System.out.println(-n);
    }
}

答案 1 :(得分:1)

看起来我迟到了,但这是我的:

public static void createSequence(int n){
    System.out.println(n);
    if(n==0) return;
    createSequence(n-Integer.signum(n));
    System.out.println(-n);
}

适用于积极和消极的投入。

答案 2 :(得分:0)

我认为最简单的方法是编写一个辅助递归方法:

public static void createSequence(int n) {
    writeSequence(n, -n);
}
private static void writeSequence(int current, int limit) {
    if (current >= limit) {
        System.out.println(current);
        writeSequence(current - 1, limit);
    }
}

答案 3 :(得分:0)

您可以将原始号码作为第二个参数进行检查:

public static void createSequence(int n, int limit) {
    if (n < limit)
        return;
    else{
        System.out.println(n);
        createSequence(n-1, limit);
    }
}

同样使用:createSequence(5, -5);,它将打印:

5
4
3
2
1
0
-1
-2
-3
-4
-5

答案 4 :(得分:0)

在这种情况下,您通常使用辅助方法进行递归调用:

public static void createSequence(int n) {
    createSequenceHelper(n, -n); // be sure that 'n' is positive here
}

private static void createSequenceHelper(int n, int limit) {
    if (n >= limit) {
        System.out.println(n);
        createSequenceHelper(n - 1, limit);
    }
}

答案 5 :(得分:0)

已修复!

public static void createSequence(int n) {
    if (n== 0){
        System.out.println(0);
        return;
    }else{
        System.out.println(n);
        createSequence(n-1);
        System.out.println(n*-1);
      }
  }

答案 6 :(得分:0)

解决问题的最佳方法是以下代码。在调用此递归函数之前,应将start初始化为n。 (开始= N)

public static void createSequence(int n, int start) {
if (start + n == 0)
    return;
else{
    System.out.println(n);
    createSequence(n-1, start);
  } 
}