递归计划

use*_*024 6 java recursion

我被困在这段代码中:

问题:孩子可以一次跳1,2或3步的阶梯n.给定n的值,打印他可以爬楼梯的顺序的所有排列.

这是我的代码:

    public class HoppingLad
    {
        int count;
        void hop(int n,int present)
        {
            if(n==present)
            {
                count++;
                System.out.println("\nFinished type "+count+" climbing.\n");
            }
            else
            {
                if((n-present)>=1)
                {
                    System.out.print("\nClimbed 1 step.\nReached "+(present+1)+"   ");
                    hop(n,present+1);
                }
                if((n-present)>=2)
                {
                    System.out.print("\nClimbed 2 step. \nReached "+(present+2)+"   ");
                    hop(n,present+2);
                }
                if((n-present)>=3)
                {
                    System.out.print("\nClimbed 3 step. \nReached "+(present+3)+"   ");
                    hop(n,present+3);
                }


            }

        }

        public static void main(String [] args)
        {
            HoppingLad hl=new HoppingLad();
            hl.hop(3, 0);
            System.out.println("There are "+hl.count+" ways to climb.");
        }
    }
Run Code Online (Sandbox Code Playgroud)

输出是:

 Climbed 1 step.  
 Reached 1  
 Climbed 1 step.  
 Reached 2  
 Climbed 1 step.  
 Reached 3   
 Finished type 1 climbing.


 Climbed 2 step. 
 Reached 3   
 Finished type 2 climbing.


 Climbed 2 step. 
 Reached 2   
 Climbed 1 step.
 Reached 3   
 Finished type 3 climbing.


 Climbed 3 step. 
 Reached 3   
 Finished type 4 climbing.

 There are 4 ways to climb.
Run Code Online (Sandbox Code Playgroud)

我得到的输出部分正确,部分不完整.爬楼梯的方法是正确的,但正如您所注意到的那样,

爬2
达到3

输出的一部分即将到来

攀登1
达到1

部分即将到来.我绘制了递归树,树甚至建议第一部分不在输出中.

但是,必须从地面指导用户.我尝试过很多东西,但没有用.任何人都可以帮我解决这个问题吗?

Gar*_*han 0

你的问题——如果我正确理解了这个问题——是,例如,当你考虑从步骤 0 爬到步骤 1 开始的可能性时,你只需打印一次“从 0 爬到 1”,然后显示从第 1 步开始的所有可能性。(其中,一般来说,会有很多。)

相反,您需要安排在进行递归时跟踪完整的路线,然后当您到达楼梯顶部时打印出整个路线。

例如,您可以通过为HoppingLad类提供一个数组来做到这一点,该数组在调用 开始时hop(n,k)描述小伙子如何走到步骤k。然后,在这种n==present情况下,您可以查看该数组以输出关于小伙子如何从 0 到 的完整描述n

有几种不同的方法可以组织这个问题,而且这个问题看起来相当像家庭作业,所以我不想填写太多细节。尽管如此,我还是希望上述内容能有所帮助。