为什么这个递归函数只在使用ELSE时才有效

时间:2017-05-02 16:07:45

标签: c++ recursion

我做了这个函数,它返回一个整数的位数: 当我使用ELSE返回计数

时,它工作正常
int getIndex(int number, int count) {   // at first call count is 0
 number /= 10;
if (number > 0){

    getIndex(number,++count);

               }
else{
    return ++count;
    }   
}

但是当我第一次尝试在没有ELSE语句的情况下执行时,我认为函数将被递归调用,直到不满足IF条件,然后只会遇到return语句

函数将在返回整数时退出,但是 实际上

如果数字包含多个数字,那么通过递归调用增加多少时间无关紧要它输出2

只是好奇为什么我的概念错了

2 个答案:

答案 0 :(得分:4)

  

当我使用ELSE时,它工作正常

实际上,所示程序的行为是未定义的。如果输入if分支,则不会到达return语句,并且程序的行为将是未定义的。

当您删除else语句而无条件地返回时,行为已明确定义:该函数将始终返回count + 1count + 2,具体取决于number的值(不是'是正确的。)

考虑一下,你在哪里使用递归函数调用的值?无处;你只需丢弃该值。将该值返回给调用者是否有意义?是的,它会的。如果只在if分支内返回,则行为正确。

return getIndex(number,++count);

然后,递归终止分支是否在else之内并不重要,只有在if分支未执行时才会执行:

答案 1 :(得分:1)

在递归调用之前,您缺少return。 默认情况下,它返回0(对于某些编译器)。

编辑:

但实际上代码应该是这样的:

int getIndex(int number) {
    if (number > 0) {
        return getIndex(number/10) + 1;
    } else {
        return 0;
    }   
}