
基本情報技術者試験詳しい方へ、回答求む
[問題]三つのスタックA, B, Cのいずれの初期状態も[1, 2, 3]であるとき、再帰的に定義された関数f()を呼び出して終了した後のBの状態はどれか。ここで、スタックが、[a1, a2, …, an-1]の状態のときにanをpushした後のスタックの状態は[a1, a2, …, an-1, an]で表す。
f(){
Aが空ならば {
何もしない。
} そうでない場合 {
Aからpopした値をCにpushする。
f()を呼び出す。
Cからpopした値をBにpushする。
}
}
こう言う問題があるんですけど、
f()を呼び出す。の処理が終わるところ(再帰的呼び出しが終わるところ)までは理解できるんです。
そのあとのCからpopした値をBにpushする。の処理が3回行われるのがなぜかわかりません。
おしえてください、、、
No.4
- 回答日時:
A[1,2,3]
B[1,2,3]
C[1,2,3]
f()が呼び出される(1回目始まり)
A空でないので、Aからpopした値をCにpushする。
A[1,2]
B[1,2,3]
C[1,2,3,3]
f()が呼び出される(2回目始まり)
A空でないので、Aからpopした値をCにpushする。
A[1]
B[1,2,3]
C[1,2,3,3,2]
f()が呼び出される(3回目始まり)
A空でないので、Aからpopした値をCにpushする。
A[]
B[1,2,3]
C[1,2,3,3,2,1]
f()が呼び出される(4回目始まり)
A空なので何もしない。
f()4回目終わり。
f()3回目の続き:Cからpopした値をBにpushする。
A[]
B[1,2,3,1]
C[1,2,3,3,2]
f()3回目終わり。
f()2回目の続き:Cからpopした値をBにpushする。
A[]
B[1,2,3,1,2]
C[1,2,3,3]
f()2回目終わり。
f()1回目の続き:Cからpopした値をBにpushする。
A[]
B[1,2,3,1,2,3]
C[1,2,3]
f()1回目終わり。
No.1
- 回答日時:
最初にf()が呼び出されて、その後Aが空になるまで再帰的にf()が3回呼び出されるが、それぞれ呼び出されるf()の処理をf0, f1, f2, f3と呼ぶとします。
f3ではAは空になっているので何も起きず、単にf2に戻るだけで、そこでB->Cの転送が行われてf2が終わります。その後f1の処理に移り、同様にB->Cの転送が行われf1が終わって、f0に処理が移りまたB->Cの転送が行われ全処理が終了。
つまり、B->Cは3回行われます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
If Not c Is Nothing Then ~延...
-
DoEvents関数って何?
-
ExcelVBA処理経過をリアルタイ...
-
プログラム上のCPU稼働率低減に...
-
VBでの簡易電卓の作成(減算方...
-
Excelでのセル内容の高速消去方法
-
ソートに関する質問です
-
SQLの速度をあげるには・・・
-
C言語 再帰処理のメリットとデ...
-
VB 電卓 メモリー機能
-
WebBrowserの読み込み待ちの処...
-
実行時のCPU使用率を増やしたい
-
ノットイコールを教えて下さい
-
Excel VBA データ削除の高速化
-
非同期プログラミングは必ずマ...
-
.netからexcel操作の処理速度が...
-
WindowsMessage(ウィンドウメッ...
-
小数点を含む数値かどうか判断...
-
VC++2010 GDIオブジェクトの解...
-
Macターミナルで実行中のプログ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Excel VBAにて、2GB超の点群デ...
-
小数点を含む数値かどうか判断...
-
プログラム上のCPU稼働率低減に...
-
Excelでのセル内容の高速消去方法
-
DoEvents関数って何?
-
SQLの速度をあげるには・・・
-
win10で、正確な待ち時間の作り方
-
If Not c Is Nothing Then ~延...
-
絶対パスの取得について
-
VC++2010 GDIオブジェクトの解...
-
ノットイコールを教えて下さい
-
C言語:関数を使うメリットとデ...
-
あっち向いてホイのプログラム...
-
再帰呼び出しを使いますか?
-
Excel VBA データ削除の高速化
-
C#で書かれたプログラムをバッ...
-
c言語で自然数nを入力、2以上n...
-
異なるプログラミング言語を連...
-
Excel VBA での処理時間計測結...
-
再帰呼出について
おすすめ情報
答え書くの忘れました。 [1,2,3,1,2,3]