非負の整数nに対する関数digitSumを次のように定義する。digitSum(729)の戻り値はいくつか。modは整数除算の余り、divは商の小数部を切り捨てる整数除算を表す。 ○ 整数型: digitSum(整数型: n) if (n = 0) return 0 else return (n mod 10) + digitSum(n div 10) endif
本サイトで独自に作成。IPAの試験問題からの転載ではありません。
公開日:
選択肢を選んで、答え合わせをしましょう。
回答せずに正解・解説を確認する
正解:ウ 18
この表示だけでは、回答数や正答率は変わりません。
解説
digitSum(729)は9 + digitSum(72)、digitSum(72)は2 + digitSum(7)、digitSum(7)は7 + digitSum(0)となります。digitSum(0)は0なので、呼出し元へ順に戻ると7、9、18です。結果は十進表記の各桁7+2+9の合計18になります。
9は一の位だけの値、またはdigitSum(72)の値です。最外側の呼出し全体の答えではありません。
7+9の値で、十の位2が抜けています。
各呼出しの余り9、2、7を合計した18です。
関数は元の数をそのまま返さず、各桁を分解して足しています。
関連知識
再帰では終了条件と、終了へ近付く引数の変化を確認します。非負整数を10で整数除算すると桁数が減り、最終的に0になります。呼出しごとにnは別の値です。
間違えやすいポイント
再帰の呼出しを進める段階だけで終わらず、戻り値を足しながら戻る段階も追います。
覚え方
余りで一桁を取り、商で残りへ進む。
実務での意味
桁の処理や木構造の走査など、同じ形の小さな問題へ分解する関数を読む練習になります。
解説:本サイト編集部によるオリジナル文章