当我们找到答案时退出先前的递归

时间:2017-11-09 13:20:18

标签: c recursion exit

我在c编程中有一个问题(也可能在其他语言中) 考虑这个计划:

(我想在不使用数组的情况下编写可以被3分割的最后一个输入数字......并且只是递归)

int func( int n )
{

    int a;
    if (n==0)
        return 0;
                scanf("%d",&a);
        function(n-1);
    if(a%3==0)
    {
        printf("%d\n",a);
        return 1;
    }
}

但不幸的是,它以相反的顺序打印可分为3的数字(我想要的最后一个数字可以被3分割)

1 个答案:

答案 0 :(得分:0)

您必须返回要打印的值,如果它有效且之前没有返回其他有效值(例如,使用-1作为无效标记)

int func (int n) {
    int a;

    if (n == 0)
       return -1;
    scanf("%d", &a);
    int ret = func(n-1);
    if ((ret == -1) && (a%3 == 0))
        ret = a;
    return ret;
}

现在您可以打印func()的返回值。

printf("%d\n", func(100)); // For 100 values