1

我正在尝试使用递归程序打印出一个序列,该序列从一个值开始,达到最大值,然后返回到原始值。程序不能使用静态或全局变量,也不能使用数组。

例如:f(5,10)印刷品5,6,7,8,9,10,9,8,7,6,5

我想我有这个概念,至少我认为我有,但我不知道如何从递归方法打印变量来打印序列。
这是我的程序:

 public class recursive {

     public static int f(int a, int b) {
         System.out.print(a);   
         if (a == b) return a;
         else return a + f(a + 1, b) + a;

     public static void main(String[] args) {
         f(2, 5);
     }

 }

我需要更改程序才能打印吗?我相当确定我的概念是正确的,我只是无法打印它。请帮忙!!!!

4

5 回答 5

1

如果您必须在递归函数内打印,只需打印而不是返回..

public static void f(int a, int b) {
    if (a == b) {
        System.out.print(a);
    }
    else {
        System.out.print(a + ",");
        f(a+1,b);
        System.out.print("," + a);
    }
}
于 2013-10-08T00:23:12.077 回答
0

您可以将输出视为嵌套的一系列输出。例如,使用f(5, 10),您应该打印一个 5,然后是一个逗号, print f(6, 10),然后打印一个逗号和另一个 5。然后您只需要识别并处理基本情况(您不递归),您将完成.

于 2013-10-08T00:20:28.407 回答
0
public static void f(int a, int b) {
    if(a != b) {
        System.out.print(a + ",");
        if(a < b) {
            f(a + 1, b);
        } else {
            f(a - 1, b);
        }
        System.out.print("," + a);
    } else {
        System.out.print(a);
    }
}

public static void main(String[] args) {
    f(2, 5); //2,3,4,5,4,3,2
    System.out.println();
    f(5, 2); //5,4,3,2,3,4,5
}

您的代码存在一些问题:

  • 如果a大于b,代码将继续执行,直到您收到 StackOverflowError。
  • ab不相等时,您将返回一个整数,而不是一个字符串。
  • 打印a + f(a + 1, b) + a将导致打印错误的输出,因为您在打印函数内部调用了打印函数。
于 2013-10-08T00:57:55.440 回答
0
public class recursive {
    public static void f(int a, int b) {
        if (a == b) {
            System.out.print(a);
        } else {
            System.out.print(a + ",");
            f(a + 1, b);
            System.out.print("," + a);
        }
    }

    public static void main(String[] args) {
        f(2, 5);
    }
}
于 2013-10-08T00:30:25.037 回答
0

如果你不能使用数组,那 main(String []args) 将是一个问题;)

你想做的是:

boilerplate boilerplate void recursive(num, max) {
    System.out.print(num)

    if (number < max) {
        System.out.print(",");
        recursive(+1, max);
    }

    System.out.print(num)
}

boilerplate boilerplate main(String[] args) {
   recursive(1, 10);
}

免责声明:我做 java 已经有 15 年了,所以这可能有一些非常错误的地方——除了“样板”的东西;)

于 2013-10-08T00:22:27.890 回答