C++ 递归如何知道何时停止?

C++ 递归如何知道何时停止?,c++,recursion,C++,Recursion,为什么这样做有效: void reversal(string x, int y){ if (x[y] == '\0'){ } else { reversal(x,y+1); cout << x[y]; } } void反转(字符串x,整数y){ 如果(x[y]='\0'){ }否则{ 反转(x,y+1); cout因为在第一个函数中,if条件没有做任何事情,它只是返回,它不会再次调用r

为什么这样做有效:

void reversal(string x, int y){
       if (x[y] == '\0'){
       } else {
            reversal(x,y+1);
            cout << x[y];
       }
    }
void反转(字符串x,整数y){
如果(x[y]='\0'){
}否则{
反转(x,y+1);

cout因为在第一个函数中,if条件没有做任何事情,它只是返回,它不会再次调用reverse,因此函数返回,然后它返回到下一个函数,现在它会重新调用,等等


另一个只会继续调用reversion,并且没有一个条件除了调用reversion之外什么都不做。

第一个条件在到达字符串末尾时停止(如果字符串中的下一个字符是空终止符“\0”)


第二个从不会检查,从字符串末尾跑出来,然后断开。

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

基本情况是非常重要的,通常是任何递归方法的第一件事,这是风格和可读性的问题。重要的是,每个对递归方法的调用都会做一些小的工作,但它最终必须接收输入,这会导致它停止递归。在您的示例中,只要达到s是一个基本情况,但基本情况通常会返回一些值,然后以前的调用将组合这些值


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

确定性递归函数总是需要至少一个独立的变量值。递归需要一个基本情况
 void reversal(string x, int y){
        reversal(x,y+1);
        cout << x[y];
 }