3

我正在开发一个使用递归函数的程序。

我的问题是当递归函数的工作完成时,控制权转移到下一个函数,完成下一个函数的工作后返回递归函数。

我需要一些可以强制控制权转移回功能的代码。我不想退出我的程序。

public void function1(a, num)
{
  if(a >= num)
  {
    if(a > num)
      function1(a, num);
    else if(a == num)
    {
      a++;
      function1(a, num)
    }
  }
  else
    function2(a, num)
}

public void function2(a, num)
{
  //print result;
}

每次我打电话function1时,我都会对变量anum. 但问题是在某些条件下function2被调用时控制又被传递给function1了。你能给我一些代码来防止这种情况吗?这是我正在设计的时间表生成器的一部分。

4

4 回答 4

2

每当您想返回基地时,请返回

于 2012-09-15T10:55:53.540 回答
2

此版本的功能完全相同。

public void function1(a, num)
{
    if (a < num)
    {
        function2(a, num);
    }
    else
    {
        function1((a > num) ? a : a + 1, num);
    }
}

public void function2(a, num)
{
    //print result;
}

仅供参考:如果a通过,则大于num,则函数将无限递归,有效调用相同的参数 list function1(a, num),因此它永远不会返回,导致挂起并最终在某个时候堆栈溢出。

于 2012-09-15T11:04:05.860 回答
1

您需要将其更改为:

public void function1(a,num)
{
    if(a>num)
     {
       //Increment num or decrease a here, otherwise the recursion never ends
       function1(a,num);
       return; //Each time the method does a recursion, it stops to execute itself with
       // a new set of arguments, but when one of them decide it's over, all the 
       // instances of the method will resume one by one, so if you don't return, 
       // it executes the rest of function1.
     }
    else if(a==num) 
     {
       a++; //You probably don't want to do that, this a==num case should be merged
       // with a>num. Can you see why?
       function1(a,num)
       return;
     }
    else
       function2(a,num)
}

public void function2(a,num)
{
 //print result;
}
于 2012-09-15T11:25:31.590 回答
0

如果您只是执行一个直接循环,也许代码会更简单。

while (a <= num)
{
   function2(a, num);
   a++;
}
于 2012-09-15T22:15:53.070 回答