Почему рекурсия не работает должным образом в C

Я хочу подсчитать числа в int от пользовательского ввода от char до нуля. Этот код делает только 1 цикл. (Пожалуйста, помогите мне понять, что не так во второй части.)

void count_down_from(int num);
int main()
{
    int start;
    char letter;
    printf("print letter to reduce to zero in ACSCII");
    scanf("%c", &letter);
 
    count_down_from(letter);
    return 0;
}

Эта часть работает не очень хорошо:

 void count_down_from(int num)
    {
        if (num > 0)
        {
            --num;
            count_down_from;
            printf("%d\n", num);
        }
        else
            return;
    }
    }

Какое поведение ожидается:

void count_down_from(int num)
{
    printf("%d\n", num);
    --num;
    if (num < 0)
        return;
    else
        count_down_from(num);
}

Неясно, что такое фактическое поведение по сравнению с фактическим поведением. Не могли бы вы дать точный ввод, ожидаемый результат и фактический результат? А почему вы показываете две версии кода? Вы говорите, что один работает, а другой нет?

kaylum 09.04.2022 05:33

Точно. Второй блок не работает. 3D код работает как второй должен.

Strori 09.04.2022 05:44

Оператор count_down_from; абсолютно ничего не делает, и если ваш компилятор не предупредит вас об этом, вы недостаточно повысили уровень предупреждений. У вас есть функция, которая работает (последний блок кода), и функция, которая не работает (второй блок кода). Различия между ними точно причины этого. Так что я даже не вижу, в чем здесь вопрос.

WhozCraig 09.04.2022 05:47

Что вы имеете в виду под "абсолютно ничего не делает"? Мой компилятор gcc последней версии. Что не так с кодом?

Strori 09.04.2022 05:51
count_down_from — это функция. Таким образом, просто count_down_from; не является допустимым синтаксисом вызова функции и по сути ничего не делает. Для вызова функции нужно сделать count_down_from(num);. Вы должны увидеть это, даже просто сравнив со вторым кодом.
kaylum 09.04.2022 05:52
Формы c голосовым вводом в React с помощью Speechly
Формы c голосовым вводом в React с помощью Speechly
Пытались ли вы когда-нибудь заполнить веб-форму в области электронной коммерции, которая требует много кликов и выбора? Вас попросят заполнить дату,...
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Будучи разработчиком веб-приложений, легко впасть в заблуждение, считая, что приложение без JavaScript не имеет права на жизнь. Нам становится удобно...
Flatpickr: простой модуль календаря для вашего приложения на React
Flatpickr: простой модуль календаря для вашего приложения на React
Если вы ищете пакет для быстрой интеграции календаря с выбором даты в ваше приложения, то библиотека Flatpickr отлично справится с этой задачей....
В чем разница между Promise и Observable?
В чем разница между Promise и Observable?
Разберитесь в этом вопросе, и вы значительно повысите уровень своей компетенции.
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Клиент для URL-адресов, cURL, позволяет взаимодействовать с множеством различных серверов по множеству различных протоколов с синтаксисом URL.
Четыре эффективных способа центрирования блочных элементов в CSS
Четыре эффективных способа центрирования блочных элементов в CSS
У каждого из нас бывали случаи, когда нам нужно отцентрировать блочный элемент, но мы не знаем, как это сделать. Даже если мы реализуем какой-то...
3
5
44
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Пропущено (число) в вызове функции во втором блоке.

Ответ принят как подходящий

взгляните на мои модификации

void count_down_from(int num)
    {
        if (num >= 0) //need the >= operator to go down to zero not just 1
        {

            printf("%d\n", num);
            --num;
            count_down_from(num); //you need to send num to the call otherwise it won't be a recursive function
        }
        else
            return;
    }

else return; немного бессмысленно; код вернется в любом случае.

Jonathan Leffler 09.04.2022 07:31

Другие вопросы по теме