我做了这个函数,它返回一个整数的位数: 当我使用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
只是好奇为什么我的概念错了
答案 0 :(得分:4)
当我使用ELSE时,它工作正常
实际上,所示程序的行为是未定义的。如果输入if
分支,则不会到达return
语句,并且程序的行为将是未定义的。
当您删除else语句而无条件地返回时,行为已明确定义:该函数将始终返回count + 1
或count + 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;
}
}