在不使用任何循环或条件的情况下打印特定范围内的数字(Java)

Ogh*_*hli 6 java recursion loops

也许首先想到的是解决这类问题是递归函数,但是在没有任何条件的情况下编写递归函数也是一个挑战.

我试过这种方法打印10到60的数字:

public static void printNumbers(int n){
       int divisonByZero = 1 / (61 - n);
       System.out.println(n);
       printNumbers(n+1);
}     
public static void main(String[] args) {
       printNumbers(10);
}   
Run Code Online (Sandbox Code Playgroud)

但是当它达到数字61而没有异常处理时它会崩溃

即使使用try catch 算术异常,它仍然不是一个更好的解决方案,因为它处理异常(运行时错误).

我认为使用递归函数时的主要问题是停止条件.

我还读到在C++中有一种方法是通过创建一个带有静态变量计数器的类并初始化它然后递增计数器变量并在构造函数中打印它,之后实例化类计数器的对象将打印这些数字.

任何建议的解决方案来解决这一挑战将不胜感激.

San*_*lem 6

你可以做这样的事情:(从这个答案中获取的想法)

public class Application {

    public static void main(String[] args) {
        Print40Numbers();
        Print10Numbers();

    }

    private static int currentNumber = 10;

    private static void Print1Number() { System.out.println(currentNumber++); }
    private static void Print2Numbers() { Print1Number(); Print1Number(); }    
    private static void Print5Numbers() { Print2Numbers(); Print2Numbers(); Print1Number(); }   
    private static void Print10Numbers() { Print5Numbers();Print5Numbers();}
    private static void Print20Numbers() { Print10Numbers();Print10Numbers();}
    private static void Print40Numbers() { Print20Numbers();Print20Numbers();}



}
Run Code Online (Sandbox Code Playgroud)


ToY*_*nos 5

基于@ Imposter的答案,减少版本具有紧凑但可读的代码

class Sandbox
{
    public static void main(String args[]) throws Exception
    {
        System.out.println(getfalse(10, 60));
    }

    public static String getfalse(Integer start, Integer stop) throws Exception
    {
        return
            start + "\n" +
            Sandbox.class.getMethod("get" + (start == stop), Integer.class, Integer.class)
            .invoke(Sandbox.class, start+1, stop);
    }

    public static String gettrue(Integer start, Integer stop)
    {
        return "";
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 我不同意这个解决方案,`==` 本质上是一个 `if`(生成的字节码与标准 `if` 语句中的 `ifne` 相同)。 (2认同)