Javaで再帰呼び出しをトレースしますか?

taralee98

再帰呼び出しはスタックでどのように機能しますか?私はこのサンプルコードを持っています。このサンプルコードでは、行が例外をB印刷B 654321c印刷Cd印刷D 2468、およびeスローします。プログラムがこれらの出力を出力する理由がわかりません。たとえば、行Bでは、スタックの結果にsなりません0か?ありがとうございました

public class Problem1 { 
public static void main(String args[]) { 
    Stack<Integer> s = setStack(5); printStack("A",      s); // line A 
    s = setStack(6); stackStack(s); printStack("B", s); // line B 
    s = setStack(8); cutStack(s); printStack("C", s); // line C 
    s = setStack(8); s = cutStack(s); printStack("D", s); // line D 
    s = setStack(7); s = cutStack(s); printStack("E", s); // line E 
} 
public static Stack<Integer> setStack(int n) {     
  Stack<Integer> ans = new Stack<>(); 
    for (int i = 1; i <= n; i++) 
        ans.push(i); 
    return ans; 
    }
public static void printStack(String tag, Stack<Integer> s) { 
  System.out.print(tag + " "); 
  while (!s.empty()) System.out.print(s.pop());    
  System.out.println(); 
 } 
public static Stack<Integer> cutStack(Stack<Integer> s)  
  { 
  Stack<Integer> ans = new Stack<>(); 
  while (!s.empty()) { 
     ans.push(s.pop()); 
     s.pop();
  } 
  s = ans; return s;
} 
public static void stackStack(Stack<Integer> s) { 
   if (s.empty()) return; 
   int x = s.pop(); 
   stackStack(s); 
   s.push(x); 
}
}
thehamzarocks

stackStackの場合、より小さなスタックを検討します:123(スタックの一番上に3があります)。F1をへの最初の呼び出しstackStack()、F2をネストされた呼び出し、というようにします。

F1:stackStack(123)3をポップアウトし、xに格納します。だからx_1=3そしてs=12

F2:stackStack(12)が呼び出されるようになりました。だからx_2=2そしてs=1

F3:今stackStack(1)は呼ばれています。今、x_3=1そしてs空です。

今、sは空です。したがって、コントロールは単にF3に戻ります。

次に、F3x_3 =1は空のをプッシュしますsしたがってs=1、コントロールはF2に戻ります。

F2はにプッシュx_2=2s=1ます。そのs=12ため、コントロールはF1に戻ります。

F1はにプッシュx_1=3s=12ます。だからs=123

元のスタックができあがり、printStack()321を出力するだけです。

これにより、再帰が一般的にどのように機能するかがわかります。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

再帰呼び出しをトレースバックする

分類Dev

Javaは末尾再帰呼び出しをサポートおよび最適化しますか?

分類Dev

Jest:Promise内で再帰呼び出しをテストする

分類Dev

再帰呼び出しでパスをカウントする

分類Dev

再帰呼び出しを伴うreturnステートメントはPythonでどのように中間値を保持しますか?

分類Dev

マクロレットは、ローカルで定義されたマクロ間の再帰呼び出しを禁止していますか?

分類Dev

returnステートメントは、再帰関数呼び出しで異なる役割を果たしますか?

分類Dev

Java再帰コンストラクターの呼び出し

分類Dev

再帰ループの呼び出しスタックを出力します

分類Dev

Nodejsエラーで再帰呼び出しを行うと約束します

分類Dev

Bashスクリプトループは、内部から再帰的に自分自身を呼び出すと、途中で終了します

分類Dev

非静的コンテキストから同じクラスのJavaコンストラクターを呼び出すと再帰が発生しますが、静的では正常に機能しますか?

分類Dev

Javaデバッグインターフェイスを使用して再帰呼び出しをトレースするにはどうすればよいですか?

分類Dev

letを使用したスキームで関数を再帰的に呼び出す

分類Dev

再帰呼び出しPythonでリストの要素を交換する

分類Dev

ネストされた再帰呼び出し-これは末尾再帰ですか?

分類Dev

スタックトレースでは再帰呼び出しが行われますが、コードC#では何もありません

分類Dev

遅延再帰呼び出しをコンパイラーで最適化できますか?

分類Dev

再帰を使用してvueリソースajax呼び出しを再試行します

分類Dev

SQLコマンドは再帰的なストアドプロシージャを呼び出します

分類Dev

forループの再帰呼び出しをどのように最適化できますか?

分類Dev

再帰的なテンプレート関数の最初の呼び出しで関数を実行するにはどうすればよいですか?

分類Dev

1回のコールバック呼び出しだけで非同期呼び出しを再帰的に実行する方法はありますか?

分類Dev

定期的に呼び出すサービスへの再帰呼び出しをコーディングするにはどうすればよいですか?

分類Dev

再帰的なJavaScript呼び出しでreturnステートメントを適切に設定するにはどうすればよいですか?

分類Dev

ネストされたクロージャ内で完了ハンドラを呼び出して、再帰関数を停止します

分類Dev

再帰呼び出し内にあるステートメントを1回だけ印刷するにはどうすればよいですか?Python

分類Dev

再帰呼び出し内にあるステートメントを1回だけ印刷するにはどうすればよいですか?Python

分類Dev

データフレームクエリを使用して再帰呼び出しから値を取得する方法

Related 関連記事

  1. 1

    再帰呼び出しをトレースバックする

  2. 2

    Javaは末尾再帰呼び出しをサポートおよび最適化しますか?

  3. 3

    Jest:Promise内で再帰呼び出しをテストする

  4. 4

    再帰呼び出しでパスをカウントする

  5. 5

    再帰呼び出しを伴うreturnステートメントはPythonでどのように中間値を保持しますか?

  6. 6

    マクロレットは、ローカルで定義されたマクロ間の再帰呼び出しを禁止していますか?

  7. 7

    returnステートメントは、再帰関数呼び出しで異なる役割を果たしますか?

  8. 8

    Java再帰コンストラクターの呼び出し

  9. 9

    再帰ループの呼び出しスタックを出力します

  10. 10

    Nodejsエラーで再帰呼び出しを行うと約束します

  11. 11

    Bashスクリプトループは、内部から再帰的に自分自身を呼び出すと、途中で終了します

  12. 12

    非静的コンテキストから同じクラスのJavaコンストラクターを呼び出すと再帰が発生しますが、静的では正常に機能しますか?

  13. 13

    Javaデバッグインターフェイスを使用して再帰呼び出しをトレースするにはどうすればよいですか?

  14. 14

    letを使用したスキームで関数を再帰的に呼び出す

  15. 15

    再帰呼び出しPythonでリストの要素を交換する

  16. 16

    ネストされた再帰呼び出し-これは末尾再帰ですか?

  17. 17

    スタックトレースでは再帰呼び出しが行われますが、コードC#では何もありません

  18. 18

    遅延再帰呼び出しをコンパイラーで最適化できますか?

  19. 19

    再帰を使用してvueリソースajax呼び出しを再試行します

  20. 20

    SQLコマンドは再帰的なストアドプロシージャを呼び出します

  21. 21

    forループの再帰呼び出しをどのように最適化できますか?

  22. 22

    再帰的なテンプレート関数の最初の呼び出しで関数を実行するにはどうすればよいですか?

  23. 23

    1回のコールバック呼び出しだけで非同期呼び出しを再帰的に実行する方法はありますか?

  24. 24

    定期的に呼び出すサービスへの再帰呼び出しをコーディングするにはどうすればよいですか?

  25. 25

    再帰的なJavaScript呼び出しでreturnステートメントを適切に設定するにはどうすればよいですか?

  26. 26

    ネストされたクロージャ内で完了ハンドラを呼び出して、再帰関数を停止します

  27. 27

    再帰呼び出し内にあるステートメントを1回だけ印刷するにはどうすればよいですか?Python

  28. 28

    再帰呼び出し内にあるステートメントを1回だけ印刷するにはどうすればよいですか?Python

  29. 29

    データフレームクエリを使用して再帰呼び出しから値を取得する方法

ホットタグ

アーカイブ