4.10 再帰(Recursion), 演習4-12 K&R プログラミング言語C

4.10 再帰(Recursion)

printd の再帰のようす。

printd の再帰動作図

演習4-12

最初、再帰は SICP でさんざんやったので『楽勝』と思ったら、配列へ代入するタイミングの問題で文字列が逆転してしまった。

以下は修正したコード。

#include <stdio.h>

#define MAX 1024

int itoa(int num, char str[]);

int main(void)
{
    char str[MAX];

    itoa(12345, str);
    printf("12345 => %s\n", str);

    itoa(0, str);
    printf("0 => %s\n", str);

    itoa(-456, str);
    printf("-456 => %s\n", str);

    return 0;
}

int itoa(int n, char s[])
{
    int pos = 0;

    if (n < 0) {
        s[pos++] = '-';
    }
    if (n / 10) {
        pos = itoa(n / 10, s);
    }
    n = n < 0 ? -n : n;
    s[pos++] = (n < 0 ? -n : n) % 10 + '0';
    s[pos] = '
#include <stdio.h>

#define MAX 1024

int itoa(int num, char str[]);

int main(void)
{
    char str[MAX];

    itoa(12345, str);
    printf("12345 => %s\n", str);

    itoa(0, str);
    printf("0 => %s\n", str);

    itoa(-456, str);
    printf("-456 => %s\n", str);

    return 0;
}

int itoa(int n, char s[])
{
    int pos = 0;

    if (n < 0) {
        s[pos++] = '-';
    }
    if (n / 10) {
        pos = itoa(n / 10, s);
    }
    n = n < 0 ? -n : n;
    s[pos++] = (n < 0 ? -n : n) % 10 + '0';
    s[pos] = '\0';

    return pos;
}
'
; return pos; }

実行結果

$ ./ex4-12
12345 => 12345
0 => 0
-456 => -456
プログラミング言語C 第2版 ANSI規格準拠
B.W. カーニハン D.M. リッチー
共立出版
売り上げランキング: 9726
«
»