c++ - 这是使用递归的正确方法吗?

标签 c++ recursion

Given strings s and t compute recursively, if t is contained in s return true.

Example: bool find("Names Richard", "Richard") == true;

我写了下面的代码,但我不确定它是否是在 C++ 中使用递归的正确方法;我今天刚在类里面学习了递归。

#include <iostream>

using namespace std;

bool find(string s, string t)
{
    if (s.empty() || t.empty())
        return false;
    int find = static_cast<int>(s.find(t));
    if (find > 0)
        return true;
}

int main()
{
    bool b = find("Mississippi", "sip");
    string s;
    if (b == 1) s = "true";
    else 
        s = "false";
    cout << s;
}

如果有人在我的代码中发现错误,请告诉我以便我可以修复它,或者我可以在哪里学习/阅读有关此主题的更多信息。我需要为这个星期三的递归测试做准备。

最佳答案

自从我写下答案后,问题发生了变化。

我的评论是关于看起来像这样的代码(并且可以递归)...

#include <iostream>

using namespace std;

bool find(string s, string t)
{
    if (s.empty() || t.empty())
        return false;
    string start = s.substr(0, 2);
    if (start == t && find(s.substr(3), t));
        return true;
}

int main()
{
    bool b = find("Mississippi", "sip");
    string s;
    if (b == 1) s = "true";
    else 
        s = "false";
    cout << s;
}

注意这点:

if (start == t && find(s.substr(3), t));
    return true;

这与您认为的不同。

;if 语句的末尾留下一个空体。无论该测试的结果如何,您的 find() 函数都将返回 true

我建议您提高编译器的警告级别,以便在必须调试之前捕获此类问题。

顺便说一句,我发现在每个代码块周围使用大括号,即使是单行代码块,也能帮助我避免此类错误。

您的代码中还有其他错误。从 find() 中删除魔数(Magic Number) 23 会鼓励您思考它们代表什么,并为您指明正确的道路。

您希望 start == t && find(s.substr(3), t) 工作吗?如果您可以用通俗易懂的英语(或您的母语)表达算法,那么您就更有可能用 C++ 表达它。

此外,我建议添加应返回 false 的测试用例(例如 find("satsuma", "onion"))以确保您的代码也能正常工作作为应返回 true 的调用。

最后一条建议是风格化的,像这样布置代码将使您正在测试的 bool 表达式更加明显,而无需求助于临时变量并与 1 进行比较:

int main()
{
    std::string s;
    if (find("Mississippi", "sip"))
    {
        s = "true";
    }
    else
    {
        s = "false";
    }
    std::cout << s << std::endl;
}

祝你上课顺利!

关于c++ - 这是使用递归的正确方法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8393749/

相关文章:

c++ - qRegisterMetaType - 类、类*或两者

javascript - 从遍历文件夹函数返回最终值

java - 加到 n 的 1 + 2 的所有组合

c++ - 将实时外汇报价从 MT4 导入到 C++

c - 如何使用递归技术检查值X是否是列表L的成员

javascript - dart 递归类方法总是返回 null

python - 合并两个列表并递归排序

python - 从 python 调用 C++ 方法

c++ - 为什么 'typedef' 这个词后面需要 'typename' 作为依赖类型?

C++primer 第 5 篇关于 func 参数