以下は、数値の桁を再帰的に加算することにより、特定の数値を1桁に減らすためのコードです。
たとえば、入力が845
出力の場合は8
。8+4+5 = 17 -> 1+7 = 8
(出力)
#include <stdio.h>
#define TRUE 1
int reduceToSingle(int numb);
int main()
{
int numb;
scanf("%d",&numb);
printf("Original = %d Single digit = %d\n", numb, reduceToSingle(numb));
return TRUE;
}
int reduceToSingle(int numb)
{
int sum = 0, digit = 0;
for (digit = numb % 10; numb != 0; numb = numb / 10)
{
digit = numb % 10;
sum += digit;
}
if (sum > 9)
reduceToSingle(sum);
else
return sum;
}
if (sum > 9)
上記のブロックのコードでは、関数値を返していません。代わりに関数を呼び出しました。論理的には、この関数は誤った値を与えるはずです。しかし、システムで上記のプログラムを実行すると、正しい桁数の合計が出力に表示されました。この振る舞いの背後にある論理を理解することはできません。