再帰処理の深さに合わせた出力2008年07月26日 05時25分24秒

再帰処理を実装していると、その入力値を再帰毎に出力したい場合が多い。文字列をどんどん深く渡していく場合など、各階層毎に目視点検する場合もある。関数への入力値と出力値を printf などで出力する。

そのような場合に単純に printf などで、出力するとどの階層の入力だか出力だか解らなくなるのが世の常だ。再帰の深さも printf で出力してもいいが、やはり再帰らしく一段深くなる毎に print 分に一つずつ空白を足していくのが、視覚的にも見やすい。

幾つかのやり方があるだろうが、printf の出力の深さを用いた書式が一番いいようだ。printf の width と depth を使う。

以下の例では再帰関数は大したことをしていない。しかし、再帰の度に出力の空白文字は増えていく。この形なら、一文で済む。デバッグの為のコードが複数行にわたると色々と不便だ。


#include "stdio.h"

void recursive(int n)
{
    static int depth = 0;
    if(n <= 0)
        return;
    printf("%*.0s: %s\n", depth++, "   ", "recursive");
    printf("%d\n", n);
    recursive(n - 1);
    printf("%*.0s: %s\n", --depth, "   ", "recursive");
}

int main()
{
    recursive(3);
}

出力はこうなる。


# ./a.out
: recursive
3
 : recursive
2
  : recursive
1
  : recursive
 : recursive
: recursive

コメント

コメントをどうぞ

※メールアドレスとURLの入力は必須ではありません。 入力されたメールアドレスは記事に反映されず、ブログの管理者のみが参照できます。

※なお、送られたコメントはブログの管理者が確認するまで公開されません。

名前:
メールアドレス:
URL:
コメント:

トラックバック

このエントリのトラックバックURL: http://uyota.asablo.jp/blog/2008/07/26/3651817/tb

※なお、送られたトラックバックはブログの管理者が確認するまで公開されません。