我一直在努力理解递归的过程。不幸的是,我无法获得解决方法。我的意思是对字符串进行递归“跟踪”。你能解释一下为什么使用 &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/