c - 字符串递归函数的进展

标签 c arrays pointers recursion c-strings

我一直在努力理解递归的过程。不幸的是,我无法获得解决方法。我的意思是对字符串进行递归“跟踪”。你能解释一下为什么使用 &str[1] 吗? &str[1] 和递归函数进展如何?我确实想明白。感谢您提供所有赞赏的答案。我想我需要所有的细微差别。

/*Figure 10.4  Recursive Function to Count a Character in a String*/
/*
 *  Count the number of occurrences of character ch in string str
 */
int
count(char ch, const char *str)
{
      int ans;

      if (str[0] == '\0')                           /*  simple case  */
            ans = 0;
      else                      /*  redefine problem using recursion */
            if (ch == str[0])   /*  first character must be counted  */
                  ans = 1 + count(ch, &str[1]);
            else                /*  first character is not counted   */
                  ans = count(ch, &str[1]);

      return (ans);
}

最佳答案

实际上 &str[1]str + 1 相同。

因此,函数 count() 被递归调用,接收指向字符串中下一个 char 的指针作为第二个参数,直到它满足 NULL.

它的其余功能非常明显。它计算 ch(作为第一个参数传递的 char)在以 str(指向 char 在第二个参数上给出)。如果当前指向的char(由*str指向)是NULL,那么目前ans的值为返回,因为已到达字符串的末尾。否则ans是否递增取决于当前指向的char(*str指向)是否与ch相同> 或不。

关于c - 字符串递归函数的进展,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27335301/

相关文章:

javascript - 对象或数组或两者

c++ - 更改为 vector 后如何维护指向 vector 元素的引用/指针/链接?

c++ - weak_ptr 和父子循环依赖

c - 如何使用 Clang 和 MinGW C/C++ 库编译代码? (float.h 的特殊问题)

c - 具有两个定义操作的随机访问循环数据结构

sql - 查找数组结构的第一个和最后一个

php 数组到 csv 下载集成到我当前的脚本中无法正常工作

c - 共享相同第一成员的结构 union

c - fscanf 一行读取两次

c - 我的 strcmp 函数有什么问题?