0
package abcde;

public class Abcde{

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

    public static int recursion (int n) {
        for ( int i = n; i< 123; i++)
        {
            String achar = new Character((char)i).toString();
            System.out.print(achar);

        }
        return -1; 
    }
}

所需的输出必须是 abcdefghijklmnopqrstuvwxyz 而输出是 abcdefghijklmnopqrstuvwxyz-1

我不想要最后的-1。当我将输入类型更改为 void 时,该方法不起作用。

我们对于它可以做些什么呢?

4

4 回答 4

4

final-1在方法之外打印recursionmain()打印recursion返回的内容,恰好是-1.

如果更改 to 的返回类型,recursionvoid需要将其作为方法调用,而不是作为表达式调用。换句话说,您不能再调用println(recursion(97)),因为println需要打印一个值。

作为旁注,为了递归,方法需要有一个直接或间接调用相同方法的代码路径。由于您的recursion方法缺少“调用自身”功能,请考虑将其重命名为iteration.

于 2013-04-12T20:39:46.187 回答
2

将其重写为:

public static void main(String[] args){
    noRecursion(97);
}

public static void noRecursion (int n) {
            //^^^^
    for (int i = n; i< 123; i++) {
        System.out.print((char)i);
     } 
}
于 2013-04-12T20:39:12.583 回答
2

实际上,您的recursion函数除了 之外什么都不返回, -1它确实在返回之前打印了所有其他字符。

如果你把它改成

public static void notRecursion (int n) {
    for ( int i = n; i< 123; i++)
    {
        String achar = new Character((char)i).toString();
        System.out.print(achar);

    }
}

然后从你的主要调用它

notRecursion(97);

它将打印您想要打印的内容


或者

public static String recursion (int n) 
{
    if(n >97 +1)
    {
        System.out.print(recursion(n-1)); 
    }

    String achar = new Character((char)n).toString();
    return(achar)
}

然后用

System.out.println(recursion(123));
于 2013-04-12T20:39:56.543 回答
1

选择纯函数而不是副作用:

public static String iteration (int n) {
    final StringBuilder b = new StringBuilder();
    for (char c = (char)n; c < 123; c++)
        b.append(c);

    return b.toString();
}

现在您可以像现在一样调用此方法,并打印其结果。

于 2013-04-12T20:42:02.010 回答