停止功能从打破无限递归

问题描述 投票:2回答:3

我卡在这部分从这个练习中,我做。我需要两个数字输出的数字,直到达到零,然后直到相同的值,但负。例如:

输入: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;
}
c
3个回答
1
投票

我怀疑这次演习的目的是要具备的功能打印,同时通过递归出发的人数和打印的出路了否定:

#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;
}

0
投票

我会尽量回答我最好的回答这个问题。但是,请记住,这个解决方案,只有当减法数(即M)减去(M)以这样的方式,在某些时候,它会给你0,当你继续减去男,如果它不那么这个解决方案的工作还将继续递归下去。

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

0
投票

我认为递归的基本情况是不好的。我调整基本情况,以便它可以正确地停止。这里是我的解决方案:

#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;

}

© www.soinside.com 2019 - 2024. All rights reserved.