我被困在这段代码中:
问题:孩子可以一次跳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
部分即将到来.我绘制了递归树,树甚至建议第一部分不在输出中.
但是,必须从地面指导用户.我尝试过很多东西,但没有用.任何人都可以帮我解决这个问题吗?
你的问题——如果我正确理解了这个问题——是,例如,当你考虑从步骤 0 爬到步骤 1 开始的可能性时,你只需打印一次“从 0 爬到 1”,然后显示从第 1 步开始的所有可能性。(其中,一般来说,会有很多。)
相反,您需要安排在进行递归时跟踪完整的路线,然后当您到达楼梯顶部时打印出整个路线。
例如,您可以通过为HoppingLad类提供一个数组来做到这一点,该数组在调用 开始时hop(n,k)描述小伙子如何走到步骤k。然后,在这种n==present情况下,您可以查看该数组以输出关于小伙子如何从 0 到 的完整描述n。
有几种不同的方法可以组织这个问题,而且这个问题看起来相当像家庭作业,所以我不想填写太多细节。尽管如此,我还是希望上述内容能有所帮助。
| 归档时间: |
|
| 查看次数: |
1281 次 |
| 最近记录: |