strlen函数很简单,大家都能熟练的应用,可是如果不允许调用库函数,也不允许使用任何全局或局部变量来编写一个MyStrlen也许就没有那么简单了,当然,递归函数就可以来解决这个问题了
size_t MyStrlen(const char * str)
{
assert(str); //参数入口检验
if(*str=='\0')
return 0;
return MyStrlen(str+1)+1;
}
当然还有更简洁的
size_t MyStrlen(const char * str)
{
assert(str);
return ('\0'==*str)? ( MyStrlen(str+1)+1) : 0;
}
但是传入的字符串如果很长的话,就需要连续多次调用函数,而函数调用的开销比循环来说要大的多,所以,递归的效率很低,递归的深度太大甚至可能出现错误(比如栈溢出),所以,平时写代码,不到万不得已,尽量不要用递归。