递归函数是否需要if语句之外的返回值

时间:2015-10-13 20:33:10

标签: function c++11 recursion return

我的代码是这样的:

string my_function(string input)
{
 if (sentinel reached)
  {
   return output;
  }
 else
 {
  //do something to change the string and get closer to the sentinel
  my_function(input);
 }
}

正如您所看到的那样,它是一个递归函数,用于检查是否已达到sentinel值,此时它将返回函数的输出。如果没有,它会对字符串执行一些操作,然后在递归中执行。

由于我在if语句中有一个返回函数,并且函数总是到达那一点,我是否需要在else语句之后返回。这似乎是不必要的,因为return语句永远不会执行。

2 个答案:

答案 0 :(得分:1)

如果您对递归进行了足够好的编程,那么最终将成为哨兵 到达,然后一些调用此函数将到达“if”分支 “if”声明。

但是如果函数实际上需要递归,那就是,如果是sentinel 在第一次调用此函数之前,它还不是真的, 然后第一次调用该函数将执行“else”子句然后执行 ... 什么?该函数应该返回一些东西,但是你没有 说什么回来。

在“else”子句的递归过程中,有些其他 (递归)调用同一个函数执行“if”子句, 没有告诉第一次调用该函数该做什么。它只能做到 你真正告诉它的是什么。

编辑:代码将编译,但不会返回有意义的值 如果甚至出现一级递归。您的编译器可能会发出警告 关于缺乏回报价值,你应该注意。

答案 1 :(得分:0)

需要一个return子句,但它应该是return my_function(input)分支中的else,否则达到哨兵时获得的最终结果将不会当堆栈被解开回原始呼叫时可用。