私はこのコードで立ち往生しています:
問題: 子供は一度に n 段の階段を 1 段、2 段、または 3 段飛び越えることができます。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.");
}
}
出力は次のとおりです。
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.
私が得た出力は、部分的に正しく、部分的に不完全です。階段の上り方の数は正しいのですが、お気づきのように、
登った 2
到達した 3
出力の一部がそのまま来ています
登った 1
到達した 1
その前に来る部分。私は再帰ツリーを描画しましたが、ツリーは最初の部分が出力にないことを示唆しています。
ただし、ユーザーは地上から指示を受ける必要があります。私は多くのことを試しましたが、役に立ちませんでした。誰でも私のためにこれを修正できますか?