C 使用递归在字符串开头查找单词的长度
我编写了下面的代码,用递归计算字符串开头的单词长度。我曾经想到过一种情况,在这种情况下,我的代码无法工作“#@*hello”我需要如何修改代码来解决这个问题(正确答案是5)?谢谢C 使用递归在字符串开头查找单词的长度,c,recursion,C,Recursion,我编写了下面的代码,用递归计算字符串开头的单词长度。我曾经想到过一种情况,在这种情况下,我的代码无法工作“#@*hello”我需要如何修改代码来解决这个问题(正确答案是5)?谢谢 有点不清楚为什么要在函数语言之外使用递归来解决这个问题。坦率地说,这也有点不清楚问题的实际参数是什么 如果您的实际意图是测量字符串中第一个单词的长度(定义为如果传递给Isleter,则返回True结果的字符序列),即使该单词不是从字符串的开头开始,那么最简单的,最清晰的解决方案似乎是:让函数使用一个名为letterSe
有点不清楚为什么要在函数语言之外使用递归来解决这个问题。坦率地说,这也有点不清楚问题的实际参数是什么 如果您的实际意图是测量字符串中第一个单词的长度(定义为如果传递给
Isleter
,则返回True
结果的字符序列),即使该单词不是从字符串的开头开始,那么最简单的,最清晰的解决方案似乎是:让函数使用一个名为letterSeenYet
的标志作为参数。首次调用函数时,应将标志设置为False
- 如果函数读取非字母字符,且
标志为letterSeenYet
,则将False
设置为0+递归函数调用的结果,并确保该调用的标志设置为length
False
- 如果函数读取字母字符,请将
设置为1+递归函数调用的结果,并确保该调用的标志设置为length
True
- 如果函数读取非字母字符,且
标志为letterSeenYet
,则返回0True
同样,我真的不明白为什么要用递归来解决这个问题。有一些问题以递归的形式更容易理解,但这个问题似乎更容易(也更有效)以迭代的方式处理。(另外,正如Charles Salvia指出的,您不仅应该为第一个单词的结尾做好准备,还应该为字符串的可能结尾做好准备。)不太清楚为什么要在函数式语言之外使用递归来解决这个问题。坦率地说,这也有点不清楚问题的实际参数是什么 如果您的实际意图是测量字符串中第一个单词的长度(定义为如果传递给
Isleter
,则返回True
结果的字符序列),即使该单词不是从字符串的开头开始,那么最简单的,最清晰的解决方案似乎是:让函数使用一个名为letterSeenYet
的标志作为参数。首次调用函数时,应将标志设置为False
- 如果函数读取非字母字符,且
标志为letterSeenYet
,则将False
设置为0+递归函数调用的结果,并确保该调用的标志设置为length
False
- 如果函数读取字母字符,请将
设置为1+递归函数调用的结果,并确保该调用的标志设置为length
True
- 如果函数读取非字母字符,且
标志为letterSeenYet
,则返回0True
同样,我真的不明白为什么要用递归来解决这个问题。有一些问题以递归的形式更容易理解,但这个问题似乎更容易(也更有效)以迭代的方式处理。(此外,正如Charles Salvia指出的,您不仅应该为第一个单词的结尾做好准备,还应该为字符串的可能结尾做好准备。)从递归的角度思考可能有点棘手。不必详细说明为什么或者为什么不使用递归,让我们假设它必须是递归(家庭作业、发现,不管是什么原因) <> P>递归的主要考虑是<强>终止条件< /强>是什么。如果这样做有困难,也许以迭代的方式编写算法可以帮助您 在本例中,需要确定的是字符数组何时结束。如果当前字符为
“\0”
,则会出现这种情况
简单的递归算法可能是:
- 检查当前字符。是“\0”吗?
- 是:返回0
- 否。当前字符是字母吗?
- 是:返回1+使用递增字符指针调用此函数
- 否:返回0+使用递增字符指针调用此函数
无论如何,我的主要观点是思考终止条件应该是什么。从递归的角度思考可能有点棘手。不必详细说明为什么或者为什么不使用递归,让我们假设它必须是递归(家庭作业、发现,不管是什么原因) <> P>递归的主要考虑是<强>终止条件< /强>是什么。如果这样做有困难,也许以迭代的方式编写算法可以帮助您 在本例中,需要确定的是字符数组何时结束。如果当前字符为
“\0”
,则会出现这种情况
简单的递归算法可能是:
- 检查当前字符。是“\0”吗?
- 是:返回0
- 否。当前字符是字母吗?
- 是:返回1+调用此函数
int startWordLenRec(char s[]) { int length; if (isLetter(s[0]) == false){ return 0; } else{ length = 1 + startWordLenRec(s+1); } return length; }
- 是:返回1+调用此函数