|
>再帰呼び出し部 edit(num/1000);←ここの引数numの変化と第2回・3回目の再帰関数のトレースをしたいのですが。
>
例えば、123456789と入力したとします。最初の再帰関数で1回目(false)で123と表示されるのはトレースで分かりますが、再帰関数2回目以降でどうしてもトレースの結果、再帰関数n回目(false)となり、
printf(",%03u ",num%1000);
を実行できません。どのような理由でそのようなトレースになってしまうのか。
私としては、
1 2回目以降の再帰関数への引数の値がわからない。
2 1の引数がわかったとしても、次のif文の中で、num/1000がedit関数の引数であれば、いずれ1000をきる様な気がします。
3 結果、上記の様に、printf(",%03u ",num%1000);が実行できないのです
void ditail_print(long num)
{
if(num < 0)
{
putchar('-');
edit(-num);
printf("num = %ld\n",num); //表示値
}
else
{
edit(num);
printf("num = %ld\n",num); //表示値
putchar('\n');
}
}
void edit(unsigned long num)
{
static i=0;
printf("editの先頭:num = %ld\n",num); //引数numの値
if( num >= 1000 )
{
edit(num/1000);
printf("再帰%d回目(true) ,%03u ", ++i, num%1000);
printf("num = %ld\n",num);
}
else
{
printf("再帰%d回目(false) %u ", ++i, num);
printf("num = %ld\n",num);
}
}
|