• 締切済み

javaハノイの塔について

public class hanoinotou { static void move(int n,int a,int b , int c) { if(n>1) move(n-1,a,c,b); System.out.println("円盤"+n+":"+a+"→"+c); if(n>1) move(n-1,b,a,c);} public static void main(String args[]){ move(3,1,2,3); } } ↑このプログラムの動き方を教えてください よろしくお願いします

  • Java
  • 回答数3
  • ありがとう数0

みんなの回答

noname#180010
noname#180010
回答No.3

moveというメソッドないで、moveが使われている これを再帰処理といいます。 この単語を調べたらわかります。

  • heka_11
  • ベストアンサー率0% (0/1)
回答No.2

どの部分の動きがわからないのでしょうか? 失礼な話かもしれませんが、 質問やソースの内容を見ると、 今からプログラミングの学習をはじめようとしていて、 まだ殆ど知識がない状態のように思えます。 もしもソースの流れがはじめから最後までわからないのであれば、 ここで質問するよりも参考書などをみて 基礎から学習することをお勧めします。 クラスやメソッド、オブジェクトなどの概念から学習して、 実際にソースを動かしてみてから質問してみてはいかがでしょうか?

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.1

コンピュータの気持ちになればわかるさ.

関連するQ&A

  • ハノイの塔

    次のc言語で書かれたハノイの塔のプログラムをZ80で動作させたいのですが、アセンブルするとどうなるのでしょうか??教えてください。 void move(char n,char a,char b){ if(n>1)move(n-1,a,6-a-b); if(n>1)move(n-1,6-a-b,b); } int main(){ char n=5; move(n,1,2); }

  • Javaの計算について

    Java初心者です。以下の問題で、c = 10になるのか判りません。括弧が先に計算されるのではないのでしょうか?どなたか解説していただけませんでしょうか? public class M{ public static void main(String[] args){ int a = 5; int b = (a = 2) * a; a = 5; int c = a * (a = 2); System.out.println("b = " + b + " c = " + c); } }

    • ベストアンサー
    • Java
  • Java比較演算子はどちらのほうが早いですか。

    「より大きい(>)」と「以上(>=)」はどちらのほうが早いですか。 ハノイの塔の再帰を使って実験してみたところ「より大きい」が遅いという結果になりました。 より大きいは再帰が苦手?ソースが間違ってる?... などと気になったので投稿しました。 プログラミング初心者なのでお手柔らかにお願いします。 以下が使ったソースです。 public class Main{ public static void hanoi(int n, char a, char b, char c){ if(n > 0){ hanoi(n -1, a, c, b); //System.out.println(a + "から" + b + "へ"); hanoi(n -1, c, b, a); } } public static void hanoi2(int n, char a, char b, char c){ if(n >= 1 ){ hanoi(n -1, a, c, b); //System.out.println(a + "から" + b + "へ"); hanoi(n -1, c, b, a); } } public static void main(String[] args){ int count = 0; int count2 = 0; long ns = 0; long n1 = 0; long n2 = 0; while(count2 < 5){ count++; long start = System.nanoTime(); hanoi(3, 'A', 'B', 'C'); long end = System.nanoTime(); long start2 = System.nanoTime(); hanoi2(3, 'A', 'B', 'C'); long end2 = System.nanoTime(); n1 += (end -start); n2 += (end2 -start2); ns = n1 -n2; if(ns > 0) count2++; } System.out.println("「> 」平均:" +(n1 /count)+"ns"); System.out.println("「>=」平均:" +(n2 /count)+"ns"); } }

  • Javaプログラミング

    Javaプログラミングで分からない課題が出たので、教えてもらえませんか? 実行結果 1つ目の整数を入力してください。 23 2つ目の整数を入力してください。 12 足し算の結果:35 引き算の結果:11 プログラムの大枠はこのようになるのですが public class 〇〇 { public static void main(String[] args) { System.out.println("1つ目の整数を入力してください。"); } public static int add(int a,int b) { return (a + b); public static int sub(int a,int b) { } }

    • ベストアンサー
    • Java
  • javaプログラムについて

    */コマンドライン引数で2つの数字と1つの記号を受け取ります。 * //受け取った記号が『+』ならplusメソッドを呼び出し、 * //受け取った記号が『-』ならminusメソッドを呼び出し、 * //受け取った記号が『×』ならmultiplyメソッドを呼び出し、 * //受け取った記号が『÷』ならdivideメソッドを呼び出し、 * //それ以外が入力された場合は『計算できません。』と表示する * //プログラムを作成してください。 * */ public class MethodAdd9 { public static void main(String[] args) { int input1 = Integer.parseInt(args[0]); int input2 = Integer.parseInt(args[1]); String sign = args[2]; //ここにプログラムを追加してください if(sign.equals("+")){ plus(input1,input2);//プラスメソッドへ } if(sign.equals("-")){ minus(input1,input2);//マイナスメソッドへ } if(sign.equals("*")){ multiply(input1,input2);//掛算メソッドへ } if(sign.equals("/")){ divide(input1,input2);//割算メソッドへ } } // 四則演算を行うメソッドを追加 //プラスメソッド表示 public static void plus(int a,int b){ int c=a+b; System.out.println(a+b); } //マイナスメソッド表示 public static void minus(int d,int e){ int f=d-e; System.out.println(d-e); } //掛算メソッド表示 public static void multiply(int g, int h){ int i=g*h; System.out.println(g*h); } //割算メソッド表示 public static void divide(int j,int k){ int l=j/k; System.out.println(j/k); } } ここまで出来て、記号を認識してくれるようにはなったのですが、何故か"*"掛算の記号だけ読み込んでくれません。また、ここから「計算出来ません」と表示させるにはどうすれば良いでしょうか。知恵をお貸しください。

  • javaのプログラムについて

    java始めたばかりの者です。 class sample1 { public static void main(String[] args) { for(int i=1; i<=5; i++){ for(int j=0; j<i; j++){ System.out.println("*"); } System.out.println("\n"); } } } これを実行すると * * * * * * * * * * * * * * * こうなってしまい * ** *** **** ***** このようにするにはどうしたらいいのでしょうか??

    • ベストアンサー
    • Java
  • C言語 ハノイの塔

    #include<stdio.h> void hanoi(int n,char a,char b,char c); int main(void) { int n=3; printf("円板の枚数 ⇒ " ); hanoi(n,'a','b','c'); return 0; } void hanoi(int n,char a,char b,char c) { if(n > 0){ hanoi(n - 1,a,c,b); printf("%d番の板を %c から %c に移動\n",n,a,b); hanoi(n - 1,c,b,a); } } このときの再帰の処理がわかりません。。 再帰の間にprintfがあるのでどこがつながっているのか順番がわかりません。 具体的な数値の手順を教えてください。

  • javaの問題

    import java.util.Scanner; class test6{ static void printArray(int[] a) { for(int i=0;i<a.length;i++) System.out.print(String.format("%1$6s", (a[i]+" "))); System.out.println(); } static void printArray(int[][] a) { for(int[] i:a) { for(int j:i) System.out.print(String.format("%1$6s",(j+"\t"))); System.out.println(); } } public static void main(String[] args) { int[] a = {12,536,-8,7}; int[][] c = {{32,-1,32,45,67}, {535,99999,2}, {2,5,-123,9}}; printArray(a); printArray(c); } } このプログラムを表示するとこのようになるのですが、 12 536 -8 7 32 -1 32 45 67 535 99999 2 2 5 -123 9 これに一工夫加えて見やすくしたいです。 このような形にするのはどのようにすればよいのでしょうか + + | 32 -1 45 67 | | 535 99999 2 | | 2 5 -123 9 | + +

  • javaのプログラムについて

    以下のプログラムを実行するとエラーが起こるのですが原因はなんですか? class Tokuten { private String name; private int eng; private int math; private int sci; public void setData(String n, int e, int m, int s) { if(g>0 && g <1000){ name = n; eng = e; math = m; sci = s; } void show() { System.out.println("受験生の名前は" + name + "です。"); System.out.println("英語は" + eng + "点です。"); System.out.println("数学は" + math + "点です。"); System.out.println("理科は" + sci + "点です。"); } } class TokutenMain { public static void main(String[] args) { Tokuten jukensei = new Tokuten(); jukensei.setData("Hanako",81,67,78); jukensei.show(); } }

  • java コンパイルエラー (初心者です)

    次のようなソースコードを入力してコンパイルすると、 class, interface, or enum expectedというエラーが出ます。 なぜでしょうか?{}の数はあってると思いますが... dentaku.java class dentaku{ public static void main (String args[]){ //3つの変数「a」と「b」と「c」を宣言 int a =0; int b =1; int c =1; System.out.println("xを10進数,aを2進数の1の位、bを10の位、cを100の位とするとと" + (x=a^2+b^2+c^2) + "です。"); } }

    • ベストアンサー
    • Java

専門家に質問してみよう