質問: 以下問題です。 三つのスタック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する。 } } 解答だと、 A[] B[1,2,3,1,2,3] C[1,2,3]になります。 私は、 F()を再帰的に呼び出し、Aが空になった段階で、Cからpopした値をBに1度だけpushして、処理を終了しました。 Aが空になった時点で、F()の呼び出しは、二度としない認識ですが、誤っているにでしょうか。
回答: > > F()を再帰的に呼び出し、Aが空になった段階で、Cからpopした値をBに1度だけpushして、処理を終了しました。 > > > これ違いますね Cからpopした値をBにpush、を呼び出した回数分、繰り返されます > > Aが空になった時点で、F()の呼び出しは、二度としない認識ですが > > > Aが空になったら、f()はなにもしない、ですね