【问题标题】:Initializing my variable over and over agian in my recursive function在我的递归函数中一遍又一遍地初始化一个变量
【发布时间】:2021-02-24 23:12:37
【问题描述】:
#include <stdio.h>

int _strlen_recursion(char *s);

int main(void)
{
    int n;

    n = _strlen_recursion("Corbin Coleman");
    printf("%d\n", n);
    return (0);
}

int _strlen_recursion(char *s)
{
    int count = 0;
    
    
    if( s[0] == '\0')
    {
        return (count);
    }
    else
    {
        s++;
        count++;
        _strlen_recursion(s);
        return (count);
    }

}

这是我的代码。当我运行它时,我得到 1 作为我的答案。使用 python 导师后,我意识到这是因为我的变量一直被设置回 0。我尝试了各种方法来修复它,观看了 YouTube 视频并查看了网上发布的其他问题,但我不知道如何解决修理它。我是编程新手,如果有人能解释发生了什么以及如何解决它,我将不胜感激。

我的代码的重点是打印出字符串中的字符总数。我不能使用标准库或全局变量。

预期输出:

14

【问题讨论】:

  • 这不是递归的好用法——它不可扩展并且可能导致深度递归超出堆栈。所以显而易见的问题 - 您这样做是出于学习原因,还是您认为这实际上是实现所需结果的最佳方式?
  • 顺便说一句,以下划线开头的标识符保留在文件范围的命名空间中。
  • 学习理由!今天是我学习递归的第一天。所以我正在做分配给我的基本递归问题。

标签: c recursion initialization return-value


【解决方案1】:

变量count 是您的函数的本地变量,甚至是特定递归级别的变量。您不能在递归级别之间共享它。

您必须使用全局变量或将count 作为参数传递。 就个人而言,我会简单地删除它。

只返回 0 表示空字符串或 1 加上字符串长度短一个字母:

int _strlen_recursion(char *s) {
    if (s[0] == 0) return 0;
    return 1 + _strlen_recursion(s + 1);
}

按预期返回 14。

【讨论】:

    【解决方案2】:

    在那里使用static关键字,你会没事的
    并将内容更改为int r = count; count = 0; return r;

    【讨论】:

    • ...只要你只需要测量单个字符串的长度即可。
    猜你喜欢
    • 2012-04-04
    • 1970-01-01
    • 2012-04-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-04
    • 1970-01-01
    相关资源
    最近更新 更多