我一直在努力了解递归的过程。不幸的是,我无法获得解决方法。我的意思是" 追踪"字符串递归你能解释一下为什么使用&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);
}
答案 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],以便递归在一个点结束。如果我们不这样做,程序将无限循环。