深度中是独立的两种方法解决的混乱代码

问题在于 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(上面直接显示的方法)通常是首选方法。这是因为全局声明大量变量会污染全局命名空间,不推荐这样做,会导致代码不必要的混乱。

© 版权声明
THE END
喜欢就支持一下吧
点赞299赞赏 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片

    暂无评论内容