[英]strlen function using recursion in c
我是新来的递归主题,我一直在尝试使用递归编写“ strlen”函数,这就是我尝试过的东西:
int strlen ( char str[], int i)
{
if ( str[i] == 0) return i+1;
return strlen(str,i++);
}
我尝试了类似的东西
int strlen( char str[], int i)
{
if ( str[i] == 0) return 1;
return strlen(str,i++) + 1;
}
而在我的主要职能
int main()
{
char word[MAX_DIGITS];
scanf("%s",word);
printf("%d", strlen(word,0));
return 0;
}
但是我的程序每次运行都会崩溃,我缺少什么? (我正在使用C90 btw)
您的问题从这里开始:
i++
这称为后缀。 只需使用++i
或i + 1
Postfix发送值,然后增加变量。 就像这样写:
return strlen(str,i);
i = i + 1;
您必须使用前缀,该前缀会使变量递增,然后发送值。 前缀( ++i
)的作用如下:
i = i + 1;
return strlen(str,i);
或者只发送值而不更改变量:
return strlen(str, i + 1);
我认为这是最简单的方法。
size_t strlen (char* str) {
if (*str == 0) {
return 0;
}
return strlen (str+1) +1;
}
因此:
strlen ("") == 0
strlen ("a") -> strln("") + 1 == 1
strlen ("he") -> strln("e") + 1) = (strln("") + 1) + 1 == 2
等等
return strlen(str,i++);
您使用了错误的增量运算符。 i++
装置的初始值i
作为参数传递,然后它的递增。 这意味着无限递归。
您应该改用++i
或更佳的i + 1
。
如果要保留与strlen
相同的原型。 这就是我看到递归的惊奇之处。
size_t strlen(char *str)
{
static int i = 0;
if (*str != '\0')
{
i++;
return ft_strlen(++str);
}
return i;
}
我知道这不是最好的方法。 只是我的实现。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.