加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

计算java中的递归步骤

发布时间:2020-12-15 08:37:25 所属栏目:Java 来源:网络整理
导读:我想计算递归步数,并在达到某个限制时停止递归. 实际上我正在处理河内塔问题,我想限制为解决问题而执行的幻灯片数量.这是我的解决方案: class HanoiNK{ public static void main(String args[]){ int n = 4; int k = 5; try{ slide(k,n,'A','B','C'); }catc
我想计算递归步数,并在达到某个限制时停止递归.

实际上我正在处理河内塔问题,我想限制为解决问题而执行的幻灯片数量.这是我的解决方案:

class HanoiNK{

    public static void main(String args[]){

            int n = 4;
            int k = 5;

            try{
                slide(k,n,'A','B','C');
            }catch(Exception e){
                System.out.println(e);
            }
    }

    public static void slide(int counter,int height,char source,char buffer,char destination) throws Exception{      
        if(counter > 0){
            if(height == 1){                                
                System.out.println("move "+ height +" from " +
                                                source + " to " + destination);
            }else{  
                counter--;
                slide(counter,height - 1,source,destination,buffer);    
                System.out.println("move "+ hoehe +" from " +
                                                source + " to " + destination);
                counter--;
                slide(counter,buffer,destination);    
            }
        }else{
            throw new Exception("stop here");
        }
    }
}

这是现场示例:http://ideone.com/xeN4x

我的问题是我得到了

move 1 from A to B
move 2 from A to C
move 1 from B to C
move 3 from A to B
move 1 from C to A
move 2 from C to B
java.lang.Exception: stop

作为输出.但是应该执行5次而不是6次幻灯片.有任何想法吗?

解决方法

由于您要计算移动的数量而不是递归深度,因此您需要存储在每个步骤中进行的移动次数.像这样的东西:

public static int slide(int counter,int hoehe,char quelle,char ablage,char ziel)
throws Exception{         
    if (hoehe == 1) {          
        System.out.println("move "+ hoehe +" from " +                                             
                quelle + " to " + ziel);   
        if (--counter == 0) throw new Exception("hier stoppen"); 
    } else {     
        counter = slide(counter,hoehe - 1,quelle,ziel,ablage);     
        System.out.println("move "+ hoehe +" from " +          
                quelle + " to " + ziel);             
        if (--counter == 0) throw new Exception("hier stoppen"); 
        counter = slide(counter,ablage,ziel);       
    }     
    return counter;
}

然后,您获得预期的结果:

move 1 from A to B
move 2 from A to C
move 1 from B to C
move 3 from A to B
move 1 from C to A
java.lang.Exception: hier stoppen

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读