【问题标题】:Java For Loop into Recursive functionJava For循环进入递归函数
【发布时间】:2011-08-18 10:37:22
【问题描述】:
public class For {
 public static void main(String[] args){
          for(int i=2; i<=1024; i *= 2){
           System.out.println("Count is: " + i);
      }
 }




public class While {
    public static void main(String[] args){
        int i = 1;
        while (i < 1024) {
            i *= 2;
            System.out.println("Count is: " + i);
      }
 }


public class DoWhile {
     public static void main(String[] args){
        int i = 1;
        if (i < 1024) {
            do { i*=2;
                System.out.println("Count is: " + i);
            } while (i < 1024);
        }
     }

如何转换 for 循环/while 循环,使其做同样的事情,但使用递归函数?

【问题讨论】:

  • 如果是一个也请标记为作业
  • 如果这是家庭作业,请添加家庭作业标签。

标签: java recursion for-loop while-loop


【解决方案1】:

公共类测试1 {

public static void main(String[] args) {

    Test1 mainFunc = new Test1();

    int[] arr = {1,2,4,3,5,6};

    int start=0;
    int end=arr.length;
    mainFunc.callRecursiveFun(start, end, arr);
}

public int callRecursiveFun(int start, int end, int[] arr) {
    int arrLen = end;
    if(arrLen == 0) {
        return 0;
    } else {

    System.out.println("Loop Index at "+start +": "+arr[start]);


    }
    return callRecursiveFun(start+1, end-1, arr);
}

}

【讨论】:

    【解决方案2】:

    像这样:

    public class Recursive {
        public void r(int i) {
            if (i < 1024) {
                i *= 2;
                System.out.println("Count is: " + i);
                r(i);
            }
        }
    
        public static void main(String[] args) {
            Recursive r = new Recursive();
            r.r(1);
        }
    }
    

    【讨论】:

    • -1 没有帮助。让学生解决手头的问题很有帮助,恕我直言,为他们提供银盘上的解决方案不是。既然从 SO 那里得到答案这么便宜,为什么 Manpreet Pangli 还要关心听他的教授的话?
    • 它产生的结果与 OPs 问题中的示例不同。你的程序从 1 开始打印。乘以 2 应该在 println 之前完成。
    • @Ingo:我不知道这是作业。没有作业标签。我认为 -1 答案是不公平的,不是因为它们不正确,而是因为它们被用于“家庭作业问题”。
    • @Ingo:很难反驳你的观点,虽然它有点判断力!
    • 是的,@David,我关心下一代程序员,即使他们来自印度。如果人们能够逃避思考,我无法忍受。
    【解决方案3】:

    循环循环可以是这样的:

    class Main
    {
        public static void main(String[] args){
          RecWhile(1);
        }
    
        public static void RecWhile(int i) {
           if (i < 1024) {
             i = i*2;
             System.out.println("Count is: " + i);
             RecWhile(i);
           }
        }
    }
    

    【讨论】:

    • 这个答案被标记为 -1 不是因为它不正确,而是因为它给出了一个不应该以这种方式回答的问题(当然,这不是我的 POV;但就是这样它在堆栈溢出)
    • 不,那是我,不是这样。如果你没有看到这只能是作业,我没办法。
    【解决方案4】:

    获取main 的循环并将其放入带有参数int i 的自己的函数中。在该函数中,将循环重写为

    1. 如果循环条件为假(i &gt;= 1024),则return
    2. 否则,使用参数i*2 进行递归调用。

    使用参数12 调用函数,具体取决于您要重写的程序(它们不完全匹配)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-07-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-05-31
      • 1970-01-01
      相关资源
      最近更新 更多