Тело блока if
будет запущено только один раз при условии соблюдения условия, тогда как тело while
будет работать несколько раз, пока условие выполняется.В этом случае:
while(c<='Z')
{
printf("%c",c);
alpha(c+1);
}
Вы в цикле проверяете значение c
.Поскольку c
никогда не меняется, цикл никогда не заканчивается.
Ваша вторая программа - правильный способ обработки рекурсивной функции.Функция не будет вызываться рекурсивно, если не будет выполнено какое-либо условие, и если это так, она делает рекурсивный вызов, а затем возвращается, когда рекурсивный вызов завершен.