问题在于 a 不是全局变量。
这意味着:对于每个递归深度,都会创建一个新变量 a,将其忽略,然后设置为 1 并返回。由于 a 是局部变量,因此 int a 在递归深度上是独立的。
有两种方法可以解决此问题。
创建一个全局变量。您的代码可能如下所示:
#include
int string_length(char *s, int x);
int a = 0;
int main(void)
{
int length = 0, x;
char string[] = "This is a string";
x = string_length(string, length);
printf("The length of the string will be: %dn", x);
return (0);
}
int string_length(char *c, int x)
{
if (*c != '')
{
a = a + 1;
string_length(c + 1, x + 1);
}
return (a);
}
请注意,我所做的只是将 int a = 0 移到 int main(void) 之上。由于 a 现在是一个全局变量,它的值在递归函数的不同调用之间保留,这意味着它们都对同一个全局变量 a 执行 a = a + 1。
使用 x。
我注意到在你的函数中你会跟踪 int x,但从不使用它。 int x 正在跟踪您的递归深度,您可以使用它来返回字符串长度。
您的代码可能如下所示:
#include
int string_length(char *s, int x);
int main(void)
{
int length = 0, x;
char string[] = "This is a string";
x = string_length(string, length);
printf("The length of the string will be: %dn", x);
return (0);
}
int string_length(char *c, int x)
{
if (*c != '')
{
return string_length(c + 1, x + 1);
} else
{
return x;
}
}
请注意,方法 2(上面直接显示的方法)通常是首选方法。这是因为全局声明大量变量会污染全局命名空间,不推荐这样做,会导致代码不必要的混乱。
© 版权声明
本站下载的源码均来自公开网络收集转发二次开发而来,
若侵犯了您的合法权益,请来信通知我们1413333033@qq.com,
我们会及时删除,给您带来的不便,我们深表歉意。
下载用户仅供学习交流,若使用商业用途,请购买正版授权,否则产生的一切后果将由下载用户自行承担,访问及下载者下载默认同意本站声明的免责申明,请合理使用切勿商用。
THE END
暂无评论内容