字符串递归函数的进展

时间:2014-12-06 19:04:22

标签: 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);
}

2 个答案:

答案 0 :(得分:0)

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

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

其余功能非常明显。它计算从ch开始的字符串中满足char(作为第一个参数传递的str的次数(第二个参数上给出的指向char的指针) 。如果当前指向的char(由*str指向)为NULL,则返回到目前为止ans的值,因为已到达字符串的结尾。否则,ans会增加或不增加,具体取决于当前指向的char(由*str指出)是否与ch相同。

答案 1 :(得分:0)

每次我们再次调用函数计数时都会使用

& str [1](递归)我们应该在与数组中的当前char匹配后从数组中的下一个char开始。 当函数首次执行时,它检查str [0]然后我们发送str [1]到计数,同样下次我们将通过str [1]然后它实际上我们的意思是通过str [2]等等直到它到达最后一个为NULL(\ 0)。

在count内对count函数的调用发生递归,我们正在执行str [1],以便递归在一个点结束。如果我们不这样做,程序将无限循环。