如何在Java中的递归程序中打印值?

时间:2013-10-08 00:11:59

标签: java recursion

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

例如: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);
     }

 }

我是否需要更改程序才能打印?我相当肯定我的概念是正确的,我只是不能打印出来。请帮忙!!!!

5 个答案:

答案 0 :(得分: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);
    }
}

答案 1 :(得分:0)

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

答案 2 :(得分: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年了,所以除了“样板”之外,这可能还有一些问题......)

答案 3 :(得分: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);
    }
}

答案 4 :(得分: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。
  • a b 不相等时,您将返回一个整数,而不是字符串。
  • 打印 a + f(a + 1,b)+ a 将导致输出错误的输出,因为您正在打印功能内部调用打印功能。