Остановить функцию, чтобы прервать бесконечную рекурсию - PullRequest
0 голосов
/ 02 февраля 2019

Я застрял в этой части из этого упражнения, которое я делаю.Мне нужно взять два числа и вывести числа, пока оно не достигнет нуля, а затем до того же значения, но отрицательного.Например:

Ввод: 10, 2

Ввод: 10, 8, 6, 4, 2, 0, -2, -4, -6, -8, -10

Я могу уменьшить его до нуля, но использую ноль, чтобы остановить рекурсиюне знаю, как я могу использовать ноль, чтобы он поднялся до начального числа.

Код:

#include <stdio.h>

int recursion(int n, int m) {
if(n == 0) {
    return n;
} else if(n > 0) {
    printf("%d ", n);
    return recursion(n - m, m);
} else if(n <= 0) {
    printf("%d ", n);
    return recursion(n + m, m);
}


 }

int main() {

    int n, m;

    scanf("%d %d", &n, &m);

    printf("%d ", recursion(n, m));


    return 0;
}

Ответы [ 3 ]

0 голосов
/ 02 февраля 2019

Я постараюсь ответить как можно лучше, чтобы ответить на этот вопрос.Но имейте в виду, что это решение работает только тогда, когда вычитающее число (т.е. m) вычитает (m) таким образом, что в какой-то момент оно даст вам 0, когда вы продолжаете вычитать m, если это не так, то это решениетакже будет продолжаться рекурсивно продолжается.

`int recursion(int n, int m) {
   if(n == 0) {
     printf("0 ");
   } else {
       printf("%d ", n);
       return recursion(n - m, m);
       printf("%d ", -n);
   } 
}`
0 голосов
/ 02 февраля 2019

Я думаю, что базовый вариант рекурсии не очень хорош.Я настраиваю базовый корпус так, чтобы он мог правильно остановиться.Вот мое решение:

#include <stdio.h>
#include <math.h>

int recursion(int n, int m, int upperLimit) {
    if (n < upperLimit && abs(n-m) >= upperLimit) {
        return n;
    }
    printf("%d ", n);
    return recursion(n - m, m, upperLimit);
}

int main() {

    int n, m;

    scanf("%d %d", &n, &m);

    printf("%d ", recursion(n, m, n));


    return 0;

}

0 голосов
/ 02 февраля 2019

Я подозреваю, что цель упражнения - заставить функцию печатать числа во время прохождения рекурсии и выводить их отрицания при выходе:

#include <stdio.h>

static void recursion(int n, int m)
{
    printf("%d ", n);
    if (n <= 0)
        return;
    recursion(n-m, m);
    printf("%d ", -n);
}

int main()
{
    int n, m;
    scanf("%d %d", &n, &m);
    recursion(n, m);
    printf("\n");
    return 0;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...