Одним из способов, с помощью которого C позволяет справляться с проблемами, которые чрезвычайно элегантны, является рекурсия.
Рассмотрим процедуру, которая знает, как печатать только последнюю цифру числа, с предшествующим пробелом, если необходимо.
void printWithSpaces(int neblod)
{
// Take everything except the last digit.
int mene = neblod / 10;
// Now extract the last digit
int fhtagn = neblod % 10;
// Check if there are leading digits
if (mene != 0)
{
// There are, so do some magic to deal with the leading digits
// And print the intervening space.
putchar(' ');
}
putchar(fhtagn + '0');
}
OK. Так что это хорошо, за исключением того, что мы можем использовать, чтобы "сделать немного магии, чтобы справиться с начальными цифрами"?
Разве мы не хотим просто напечатать их в виде последовательности цифр с подходящими пробелами?
Разве это не то, что void printWithSpaces(int neblod)
делает?
Итак, мы делаем одно изменение:
void printWithSpaces(int neblod)
{
// Take everything except the last digit.
int mene = neblod / 10;
// Now extract the last digit
int fhtagn = neblod % 10;
// Check if there are leading digits
if (mene != 0)
{
// There are, so print them out
printWithSpaces(mene);
// And print the intervening space.
putchar(' ');
}
putchar(fhtagn + '0');
}
И все готово.
Для любопытных, следующая статья о C-рекурсии может предоставить как забавное чтение, так и немного понимания моего немного необычного выбора имен переменных. ;) http://www.bobhobbs.com/files/kr_lovecraft.html