-4
int foo(char *p)
{
static int i = 0; 
if (*p == '\0') return i;
i++;
return foo(p+1);
}

如果将此函数放在通用库中会出现什么问题。如何修改代码来回避问题?如果将此代码放在通用库中,它将返回正确的字符串长度吗?

4

2 回答 2

2

一个问题是状态在调用之间持续存在:

foo("hello");
foo("world");

第二次调用将返回不正确的结果,因为i未重置。

于 2013-02-27T12:47:44.667 回答
2

如果您连续两次调用它,i将不会是您所期望的。这是因为它是在启动时初始化的,并在调用中保留其先前的值。

此外,它不适用于线程,递归的想法最好在“搜索空间”快速减少时使用,例如在每个递归级别将空间减半的二进制搜索。

使用递归逐个字符处理字符串是一个愚蠢的想法,因为您一次只能将搜索空间减少一个字符。

于 2013-02-27T12:48:24.620 回答