const int iterations = 2;
void func() {
int value1, value2; // не инициализированы
static int depth; // неявно инициализирован нулем
if ( depth < iterations )
{ ++depth; func(); }
else depth = 0;
cout << "\nvaluel:\t" << value1;
cout << "\tvalue2:\t" << value2;
cout << "\tsum:\t" << value1 + value2;
}
int main() {
for ( int ix = 0; ix < iterations; ++ix ) func();
return 0;
}
Вот результат работы программы:
valuel: 0 value2: 74924 sum: 74924
valuel: 0 value2: 68748 sum: 68748
valuel: 0 value2: 68756 sum: 68756
valuel: 148620 value2: 2350 sum: 150970
valuel: 2147479844 value2: 671088640 sum: -1476398812
valuel: 0 value2: 68756 sum: 68756
value1 и value2 – неинициализированные автоматические объекты. Их начальные значения, как можно видеть из приведенной распечатки, оказываются случайными, и потому результаты сложения непредсказуемы. Объект depth, несмотря на отсутствие явной инициализации, гарантированно получает значение 0, и функция func() рекурсивно вызывает сама себя только дважды.