Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/63.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
return并没有破坏我在c中的递归函数_C_Recursion - Fatal编程技术网

return并没有破坏我在c中的递归函数

return并没有破坏我在c中的递归函数,c,recursion,C,Recursion,当条件满足时,如何中断该功能?返回只是在调用堆栈上向上移动(转到其上一个函数调用),而不是退出并转到main。我该怎么做呢?我认为你的函数永远不会中断,因为在你的函数中有一个temp变量的增量,它返回的是真值,而不是temp变量的值 尝试: 请先看问题,我理解。递归是一步一步地向上爬,然后一步一步地向下爬。我想问的是,一旦我找到了这个例子中的“步骤”,我能直接跳下去吗?如果你愿意,你可以使用动态编程之类的东西,然后当你找到答案时,你可以打断它。temp==x只需要temp的一个值。这应该给你一个

当条件满足时,如何中断该功能?返回只是在调用堆栈上向上移动(转到其上一个函数调用),而不是退出并转到main。我该怎么做呢?

我认为你的函数永远不会中断,因为在你的函数中有一个temp变量的增量,它返回的是真值,而不是temp变量的值

尝试:


请先看问题,我理解。递归是一步一步地向上爬,然后一步一步地向下爬。我想问的是,一旦我找到了这个例子中的“步骤”,我能直接跳下去吗?如果你愿意,你可以使用动态编程之类的东西,然后当你找到答案时,你可以打断它。
temp==x
只需要
temp
的一个值。这应该给你一个提示:你的梯子。没错。如果找到一个值,有没有一种方法可以直接从调用堆栈中出来?我知道我在这里做错了什么,只是我想知道我所想象的在c中是可能的还是根本不可能的。谢谢你分享一个解决方案,但是我看到“p”得到了不必要的返回,即使在返回pHead的x==temp条件满足之后。我想找到一种方法来避免这种情况。因此,我的问题是,一旦pHead返回,是否有可能直接跳转到main?在C的情况下,不允许您直接返回main。谢谢。C++是什么?需要从递归调用中全局逃逸。(C++有……catch,但是……)或使用<代码> LojMP(<代码> >……它们偏离返回值的灵魂。
struct Node *xFromEnd(struct Node *pHead, int x)
{
    static int temp = 1;

    if (pHead->next != NULL)
        xFromEnd(pHead->next, x);
    if ((temp++) == x)
        return pHead;
}
temp++;
if (temp == x)
return pHead;
struct Node *xFromEnd(struct Node *pHead, int x){
    static int temp = 1;//but can not reset !!

    if(pHead == NULL)
        return NULL;
    struct Node *p = xFromEnd(pHead->next, x);
    if (p == NULL){
        return (x == temp++) ? pHead : NULL;
    }
    return p;
}