基本情報技術者試験詳しい方へ、回答求む
[問題]三つのスタック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で質問しましょう!
似たような質問が見つかりました
- Wi-Fi・無線LAN PCWi-Fiの設定方法がわからなくて困っています。 4 2022/12/28 18:30
- リフォーム・リノベーション マンションリフォーム工事の際に提出する「申請書・誓約書」について 3 2022/08/04 09:45
- 情報処理技術者・Microsoft認定資格 基本情報技術者試験について 基本情報技術者試験の午後問題についてなのですが、 大門①の情報セキュリテ 1 2022/10/30 00:34
- 借金・自己破産・債務整理 教えて!「債務不履行!ついに裁判所から呼出状!本人訴訟で期日の先送りは可能か!?」 5 2022/10/14 10:31
- デスクトップパソコン 「自動修復でPCを修復できませんでした」と表示されPCが起動しないのですが対処法はありますか? 5 2022/05/13 09:16
- その他(コンピューター・テクノロジー) 量子コンピュータの動作原理がわかりません。同じビットが、1でも0でも有って良いだろうか? 3 2023/02/04 03:20
- C言語・C++・C# C言語初心者 ポインタについて、お助けください、、 2 2023/03/15 23:50
- 分譲マンション 総会前にきて、管理会社のフロントマンに振り回され役員一同が困っています。 5 2023/05/15 03:12
- Java 問題作成のWebアプリの作り方を教えてください 1 2022/11/26 22:01
- 情報処理技術者・Microsoft認定資格 J検【令和3年度後期 情報システム試験 システムデザインスキル】問題1(2)の解き方を教えてください 1 2022/03/22 18:36
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
SQLの速度をあげるには・・・
-
Excelでのセル内容の高速消去方法
-
小数点を含む数値かどうか判断...
-
DoEvents関数って何?
-
VB.NETにおける二値化処理の高速化
-
絶対パスの取得について
-
Excel(VBA)でSetTimer関数を使...
-
C言語:関数を使うメリットとデ...
-
テキストファイルの空行をスキ...
-
switch-case文の効率について
-
If Not c Is Nothing Then ~延...
-
win10で、正確な待ち時間の作り方
-
Do~Loopステートメント
-
非同期プログラミングは必ずマ...
-
GPUとCPUの違い
-
素因数プログラムで、間違えて...
-
AI(人工知能)について
-
ソケットからの入力をWaitForMu...
-
散布図グラフの近似線追加後に...
-
VBS でプログラムを先頭から再試行
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Excelでのセル内容の高速消去方法
-
DoEvents関数って何?
-
win10で、正確な待ち時間の作り方
-
小数点を含む数値かどうか判断...
-
Excel VBAにて、2GB超の点群デ...
-
SQLの速度をあげるには・・・
-
絶対パスの取得について
-
WebBrowserの読み込み待ちの処...
-
プログラム上のCPU稼働率低減に...
-
C言語 再帰処理のメリットとデ...
-
テキストファイルの空行をスキ...
-
実行時のCPU使用率を増やしたい
-
C言語 時刻差分の算出方法
-
Excel VBA データ削除の高速化
-
VBでの簡易電卓の作成(減算方...
-
Excel(VBA)でSetTimer関数を使...
-
プログラミングの授業でPython...
-
If Not c Is Nothing Then ~延...
-
C言語で、文字とか入力されなく...
-
C言語:関数を使うメリットとデ...
おすすめ情報
答え書くの忘れました。 [1,2,3,1,2,3]