c++ - myProgrammingLab "palindrome"挑战和递归

标签 c++ arrays if-statement recursion palindrome

我正在上一门编程入门类(class),通过 myProgrammingLab 将大量 Material 深入到我们的脑海中。我在递归的概念上遇到了一些麻烦……对我来说它有点被击中或错过了。这个特殊的问题让我感到难过。当我提交我的代码时,它会向我提供

CTest1.cpp: In function 'bool isPalindrome(int*, int)':
CTest1.cpp:9: error: invalid conversion from 'int' to 'int*'
CTest1.cpp:9: error:   initializing argument 1 of 'bool isPalindrome(int*, int)'"

作为建议,我可以向您保证这不是很有帮助。哈哈

我认为我的主要问题是当我到达实际的递归时。我知道有些事情不对劲,但是.. 如果你能给我指出正确的方向,我将不胜感激。

“数组回文”是一个数组,当它的元素被颠倒时,它保持不变(即,数组的元素在向前或向后扫描时相同)

编写一个递归的 bool 值函数 isPalindrome,它接受一个整数值数组和元素的数量,并返回该数组是否为回文。

如果满足以下条件,则数组是回文: 数组为空(0 个元素)或仅包含一个元素(因此在反转时相同),或 数组的第一个和最后一个元素相同,数组的其余部分(即第二个到倒数第二个元素)形成一个回文。

到目前为止我的代码:

bool isPalindrome(int arr[], int n){
    if (n == 0 || n == 1)
    {
        return true;
    }
    else if (arr[n-1] == isPalindrome(arr[((n-1) - n) +1 ], n))
    {
        return true;
    } 
    else {
        return false;
    }
}

编辑:

我现在已将我的问题行更改为

else if (arr[n-1] == isPalindrome(arr[], n-1))

现在我得到提示“我们认为您可能要考虑使用 +”。我看不到添加适用于此处的位置。我认为它不是在谈论递增,因为它像在代码中一样将递增引用为“++”。

我也收到了错误信息:

CTest1.cpp:在函数“bool isPalindrome(int*, int)”中: CTest1.cpp:9: 错误:']' 标记前需要主表达式

第二行是否因为第一个参数中的括号为空而出错?

最佳答案

当您递归调用 isPalindrome 时,您传递了这两个参数

isPalindrome(arr[((n-1) - n) +1], n)

第二个很好,但第一个参数的计算结果为

arr[index]

这只是从您的数组中索引一个值,并将评估为 int。因为它正在寻找一个 int* 或者换句话说,元素的起始地址,你可以通过

&arr[((n-1) - n) +1]

关于c++ - myProgrammingLab "palindrome"挑战和递归,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26908869/

相关文章:

c++ - 在 C++11 中抛出异常时是否使用 move 语义?

c++ - 尾随数组习语

c++ - 如何制作用户指定值的二维数组?

javascript - 如果条件不运行但条件有效

java - 禁止程序输入小于1的数字(if else/switch)

c++ - 使用 using 或 typedef 减少模板参数

c++ - 一次运行一个程序的多个实例 C++

java - If 语句错误

c++ - STL 迭代器上下文中的奇异值和非奇异值是什么?

c++ - C/C++ vector 到 Numpy 数组的快速转换