为了账号安全,请及时绑定邮箱和手机立即绑定

使用while循环检查进行递归

使用while循环检查进行递归

扬帆大鱼 2021-05-04 09:20:27
下面的代码用于打印1到用户输入的数字之间的数字。但是,当一个值num计数到等于endNum-时,while循环应该不再调用“ numberToPrint”方法。实际发生的是,在num等于endNum并且if-condition在“ numberToPrint”方法中变为真,并继续向前进时return,并没有停止在此处实现“ numberToPrint”方法,并立即切换到第23行,实际的递归会发生。有什么问题吗?为什么不停止在return真正的if条件下?//recursive printing of numbers from 1 to a user's numberimport java.util.Scanner;public class recursion {    public static void main(String[] args) {        System.out.print("Type a number from 1 to 20: ");        Scanner input = new Scanner(System.in);        Integer endNum = input.nextInt();        System.out.println();        Integer num = 1;        while (num!=endNum){            numberToPrint(endNum, num);        }    }    public static int numberToPrint(int endNum, int num) {        if (num == endNum) {            System.out.print(num + ", ");            return num;        } else {            System.out.print(num + ", ");            numberToPrint(endNum, (num + 1));            return num;        }    }}
查看完整描述

1 回答

?
月关宝盒

TA贡献1772条经验 获得超5个赞

您的while循环不知道num值的变化,因此这里有一个infitite循环。这是由于num参数的本地作用域。当您将其传递给numberToPrint函数时,您正在使用其值的副本。而且,您永远不会用返回的值更新num。


public class recursion {

    public static void main(String[] args) {

        ...

        Integer num = 1;

        while (num<= endNum){

            num = numberToPrint(endNum, num); // update num value

        }

    }


    public static int numberToPrint(int endNum, int num) {

         System.out.print(num + ", ");

        if (num >= endNum) {

            return num;

        } 

        return num + 1; 

    }

}

您在这里混合了递归和迭代。我会选择其中之一,因为在这里它们会产生大量指令。


通过递归,它看起来像这样:


    Integer num = 1;

    numberToPrint(endNum, num);

}


public static int numberToPrint(int endNum, int num) {

    System.out.print(num + ", ");

    if (num >= endNum) {

        return num;

    } 

    return numberToPrint(endNum, (num + 1));

}


查看完整回答
反对 回复 2021-05-19
  • 1 回答
  • 0 关注
  • 190 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信