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

为什么这段递归代码会无限重复?

为什么这段递归代码会无限重复?

侃侃无极 2023-03-17 10:12:17
我只是用递归代码计算,但它进入了无限循环。编辑:完整代码。而IDE(Eclipse)什么也没说,可以正常运行。class RepresentWithN {    static int number;    static int N;    static int answer;public int solution(int N, int number) {    RepresentWithN.N = N;    RepresentWithN.number = number;    answer = 9;    calc(0, 0);    return answer == 9 ? -1 : answer;}static int conN(int length) {    int tmp = N;    for (int i = 1; i < length; i++) {        tmp += tmp * 10;    }    return tmp;}static void calc(int prev, int count) {    if (count == 9) {        return;    }    if (prev == number) {        answer = Math.min(answer, count);        return;    }    System.out.println("count=" + count + " prev=" + prev);    for (int i = 1; i <= 5; i++) {        calc(prev + conN(i), count + 1);        calc(prev - conN(i), count + 1);        calc(prev * conN(i), count + 1);        calc(prev / conN(i), count + 1);    }}它重复'count'大约是7或8,不知道为什么。
查看完整描述

2 回答

?
慕哥6287543

TA贡献1831条经验 获得超10个赞

尝试这个。每次运行后,取消注释其中一个递归调用。



public class ForEverDemo {


   static long count = 0;


   public static void main(String[] args) {

      alongtime(0);

      System.out.println("count = " + count);

   }


   public static void alongtime(int v) {

      count++;

      if (v == 9) {

         return;

      }

      for (int i = 0; i < 3; i++) {

         alongtime(v + 1);

         // alongtime(v + 1);

         // alongtime(v + 1);

         // alongtime(v + 1);

         // alongtime(v + 1);

      }

   }

}


查看完整回答
反对 回复 2023-03-17
?
米琪卡哇伊

TA贡献1998条经验 获得超6个赞

终count有其价值9。通过打印这个值来检查这个。


static void calc(int prev, int count) {

        System.out.println("count=" + count + " prev=" + prev);

        if (count == 9) {

            return;

        }

        ...

你的递归中有很多分支,需要大量的计算。这就是为什么它没有结束。你可以再等一个小时或几天/几年才能看到这个程序的结束。或者用有效的代码替换此代码。


查看完整回答
反对 回复 2023-03-17
  • 2 回答
  • 0 关注
  • 131 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号