c ++编程迭代和递归

时间:2012-11-02 00:10:12

标签: c++ algorithm recursion iteration

我正在寻找一些家庭作业的快速提示。我们遇到了一些问题,必须编写两个关于如何通过迭代和递归的方法解决问题的快速程序。我相信这比我想象的要容易,但我很容易对两者感到困惑。我绝不希望任何人为我完全解决问题,我什么都不会学到!但如果你能看看我到目前为止所拥有的东西,并告诉我是否正朝着正确的方向前进。此外,代码不需要编译,我们的教授希望我们对迭代与递归的差异有一个大概的了解。

问题:检查字符串是否是回文。

我的解决方案 - 我认为这是迭代解决方案:

bool iterative_palindrome (const string& str) {
string line, result;
stack <char> stack_input;

//user enters string, program takes it
cout << "Enter string: " << endl;
while (getline (cin, line) && (line != "")) {

    //push string into stack
    for (size_t i = 0; i < line.size(); i++) {
        stack_input.push(line[i]);

        //create reverse of original string
        while (!stack_input.empty()) {
            result += stack_input.top();
            stack_input.pop();
            return result;
        }
        //check for palindrome, empty string
        if (line == result || line = "0" || line.empty()) {
            return true;
            cout << line << " is a palindrome!" << endl;
        } else {
            return false;
            cout << line << " is NOT a palindrome." << endl;
            cout << "Enter new string: " << endl;
        }
     }
  }
}

我提醒大家,我对这些东西很新。我已经阅读了一些内容,但我仍然很难绕过这个问题。

2 个答案:

答案 0 :(得分:2)

以下是一般概念:

迭代: 初始化两个指针,指向字符串的开头和结尾。

  1. 比较指出的字符,如果不同 - >不是回文。
  2. 增加开始指针并减少结束指针。
  3. 重复直到开始指针&gt; =结束指针。
  4. 递归(在这种情况下比迭代更困难):

    结束条件:长度为零或一的字符串是回文。

    如果第一个和最后一个字符相同且没有第一个和最后一个字符的字符串是回文,则字符串是回文结构。

    通过将指针传递给字符串中的第一个和最后一个字符而不是在递归之间复制字符串,可以更有效地实现此递归算法。

    希望这会有所帮助: - )

答案 1 :(得分:0)

我认为编写代码是解释这两种方法的最佳方法。这段代码可以理解吗?

bool iterative_palindrome(const string& str) {
    int size = str.size();

    for (int i=0; i<str.size()/2; i++) {
        if (str[i] != str[size-i-1])
            return false;
    }

    return true;
}

您可以将其称为recursive_palindrome(str, 0)

bool recursive_palindrome(const string& str, int index) {
    int size = str.size();

    if (index >= size/2)
        return true;

    if (str[index] == str[size-index-1])
        recursive_palindrome(str, index+1);
    else
        return false;
}