递归如何知道何时停止?

时间:2014-03-21 02:13:00

标签: c++ recursion

为什么这样做:

void reversal(string x, int y){
       if (x[y] == '\0'){
       } else {
            reversal(x,y+1);
            cout << x[y];
       }
    }

这不是吗?:

 void reversal(string x, int y){
        reversal(x,y+1);
        cout << x[y];
 }

为什么循环不会永远重复(即使它不会超过字符串大小)。是空白&#39;如果&#39;声明结束递归函数的方法?

3 个答案:

答案 0 :(得分:1)

第一个代码段中的空白if语句就是我们所说的基本情况

基本案例非常重要,通常是任何递归方法中的第一件事,因为它具有风格和可读性。要带走的基本要素是每次调用递归方法都会做一些小的工作,但最终必须接收输入,这会导致它停止递归。在您的示例中,它只是在到达基本案例时停止,但通常基本案例将返回一些先前调用将组合的值。

例如,在字符串中找到最新(即最接近z)字母的方法可能会在字符串的两半上递归,返回上半部分的最新字母或第二部分的最新字母。递归调用会将较小的子字符串分成两半,直到它到达基本大小写,一个字母才会返回到之前的调用。后面的字母将通过递归调用冒泡,直到最后第一次调用将从原始字符串的两半返回后者。

答案 1 :(得分:0)

因为在第一个,if条件没有做任何事情,它只是返回,它不再调用反转,所以函数返回,然后它退回到下一个函数,现在reutnrs等等,

另一个人只是一直打电话给逆转而且从来没有一个条件除了呼叫逆转之外什么都不做。

答案 2 :(得分:0)

第一个在到达字符串末尾时停止(如果字符串中的下一个字符是空终止符,&#34; \ 0&#34;)。

第二个从不检查,从字符串的末尾开始,然后断开。