递归不监听返回但退出(0)

时间:2015-10-11 12:14:45

标签: c

**编辑,道歉,我刚刚得知这是递归的。道歉。

**关于如何让它像循环一样工作的任何建议我可以返回**和我想要的时间?或者我的设计是非常错误的?

我有以下循环,我打电话,我个人想调用Next函数并传递前一个" root"进入树

我现在面临的问题是,当我回来时,它会被忽略但是如果我用exit(0)替换我的回报;它停止了,当我回来时它不会停止。

如果我是正确的话,返回应该停止循环并直接返回到调用它的函数,以便我可以在需要时调用NEXT。

结论:只要它返回,循环就会重复,直到树的结尾。

目标:仅当我调用此函数时才循环接下来。我将返回节点的当前位置,并在我想要Next时将其放回。

任何建议?

names.id | names.name | entries.added | entries.description
-----------------------------------------------------------
15       | bob        | 20140805      | added early on
5        | bill       | 20140908      | i added this
10       | nancy      | 20140908      | i also added this

我使用Exit()进行调试,因为它做了我想要的但我无法使用它,因为我不会得到我想要的结果

2 个答案:

答案 0 :(得分:2)

使用exit(0)时终止进程同时返回当前函数的退出。你正在进行递归调用。因此,当您点击exit(0)时,进程将停止,这意味着它将退出所有递归调用。当代码到达返回时,它只返回堆栈中的先前状态。除了返回退出递归调用之外,你需要别的东西(比如其他param或一些全局/静态变量)。

希望我没有误解你的问题。

答案 1 :(得分:1)

struct item* loop(struct item *root)
{

    struct item *ret=root; /*if neither right or left, what would be? root or null*/
   if(root != NULL){
      if(root->right != NULL) {
          ret=loop(root->right);
      }else
      if(root->left != NULL) {
          ret=loop(root->left);
      }else{
            printf("%s\n", root->basket); /*it is the last in tree*/
       }

    }
    return ret; /*the last valid item*/

}