c-递归函数VS If Else



我正试图在C中创建一个递归函数,该函数返回字符串的长度。

如果我使用If Else块,它会按预期工作:

int myFunctionCountRecursive(const char* s, int i) {
if (s[i] != '') {
i++;
myFunctionCountRecursive(s, i);
}
else
return i;
} 

但是,当我尝试使用三进制时,我看到i变量也会增加,但在返回后,函数会运行第二次并减少i

int myFunctionCountRecursive(const char* s, int i) {
(s[i] != '') ? myFunctionCountRecursive(s, ++i) : 0;
return i;
}

为了得到预期的结果,我必须写:

int myFunctionCountRecursive(const char* s, int i) {
return (s[i] != '') ? myFunctionCountRecursive(s, ++i) : i;
}

有人能解释为什么会发生这种行为吗?感谢

您的第二个代码本质上就是这个

int myFunctionCountRecursive(const char* s, int i) {
if (s[i] != '')
myFunctionCountRecursive(s, ++i);
else
0;
return i;
}

这与第一个明显不同。CCD_ 3最终总是执行。而与第一个和第三个只有当CCD_ 4这个CCD_。

最新更新