C语言中递归和非递归方式实现strlen函数
在C语言中,strlen
函数是一个常用的字符串函数,用于计算字符串的长度。在实现strlen
函数时,可以使用递归和非递归两种方式实现。
递归方式实现
递归方式实现strlen
函数,可以使用以下公式:
strlen(s) = 1 + strlen(s+1)
根据这个公式,可以写出递归函数的代码:
int strlen_recursion(char *s) {
if (*s == '\0') {
return 0;
} else {
return 1 + strlen_recursion(s+1);
}
}
在这个实现中,首先判断当前字符是否为字符串的结尾,如果是,则返回0,否则递归调用函数,将s+1
作为参数传入。最终结果为字符串的长度。
非递归方式实现
非递归方式实现strlen
函数,可以使用循环语句实现,具体实现方法如下:
int strlen_loop(char *s) {
int len = 0;
while (*s != '\0') {
len++;
s++;
}
return len;
}
在这个实现中,首先初始化长度为0,然后使用循环语句遍历字符串,每遍历一个字符,长度加1,直到遍历到字符串的结尾。最终返回字符串的长度。
使用示例
下面是一个使用strlen
函数的示例:
#include <stdio.h>
#include <string.h>
int main() {
char s[] = "Hello World!";
printf("The length of \"%s\" is %d (recursion)\n", s, strlen_recursion(s));
printf("The length of \"%s\" is %d (loop)\n", s, strlen_loop(s));
return 0;
}
该示例将字符串"Hello World!"
作为参数传入strlen_recursion
和strlen_loop
函数中,函数会递归或循环计算该字符串的长度,输出结果为:
The length of "Hello World!" is 12 (recursion)
The length of "Hello World!" is 12 (loop)
总结
递归和非递归两种方式都可以实现strlen
函数,其中递归方式使用函数调用实现,可以简化问题的解决过程,但会带来函数调用开销和栈空间占用;非递归方式使用循环语句实现,可以避免这些问题,但代码稍微复杂一些。在实际应用中,需要根据具体情况选择适合的实现方式。