int foo(char *p)
{
static int i = 0;
if (*p == '\0') return i;
i++;
return foo(p+1);
}
如果将此函数放在通用库中,会出现什么问题。如何修改代码以回避问题? 如果将此代码放在通用库中,它将返回正确的字符串长度吗?
答案 0 :(得分:2)
一个问题是状态在呼叫之间持续存在:
foo("hello");
foo("world");
第二次调用会返回错误的结果,因为i
未重置。
答案 1 :(得分:2)
如果您连续两次调用它,i
将不会是您所期望的。那是因为它在启动时初始化并保持其之前的呼叫值。
此外,它不适用于线程,并且当“搜索空间”快速减少时,最好使用递归的想法,就像二进制搜索在每个递归级别将空间减半一样。
使用递归处理字符串字符是一个愚蠢的想法,因为您一次只能将搜索空间减少一个字符。