Как глубоко вы ожидаете, что ваша рекурсия будет выполняться?
Вы получите 52 уровня итерации последнего символа из 'A ... Za ... z', 52 * 52 уровня итерации по последним двум символам и 52 * 52 * 52 общей глубины рекурсии.
Это рекурсия глубиной 140608.
Каждый раз, когда вы вызываете процедуру, вы используете некоторое количество стека. Обратный адрес должен быть сохранен. Часто некоторые регистры также должны быть сохранены.
В 64-битной системе без оптимизации вполне вероятно, что по крайней мере 32 байта стека будут использоваться для каждого уровня рекурсии. Это 4499456 байт. Предел стека в Linux часто составляет 8 МБ, поэтому вам не следует выбегать из стека (и ваша программа не вылетает для меня ни в 64, ни в 32-битном режиме). Но вы будете использовать более половины доступного стека.
Ваша система, вероятно, имеет нижний предел стека (возможно, 4 МБ). Если это так, ваша программа выйдет из стека .
В Linux (и других ОС UNIX), используйте ulimit -s
, чтобы узнать, каков текущий предел стека, и ulimit -s unlimited
, чтобы удалить предел стека (это также должно позволить вашей программе завершиться без нажатия SIGSEGV
).
P.S. Использование рекурсии для этой тривиально повторяемой задачи рекомендуется ill именно потому, что вы будете использовать lot стекового пространства.