4.10 再帰(Recursion), 演習4-12 K&R プログラミング言語C
2010年01月24日
4.10 再帰(Recursion)
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規格準拠
posted with amazlet at 09.11.27
B.W. カーニハン D.M. リッチー
共立出版
売り上げランキング: 9726
共立出版
売り上げランキング: 9726