【问题标题】:myProgrammingLab "palindrome" challenge and recursionmyProgrammingLab“回文”挑战和递归
【发布时间】:2023-11-23 12:17:02
【问题描述】:

我正在参加编程入门课程,并且通过 myProgrammingLab 将大量材料深入到我们的脑海中。我在递归的概念上遇到了一点麻烦……对我来说,它有点被击中或错过。这个特殊的问题让我很难过。当我提交我的代码时,它会为我提供

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)'"

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

我认为我的主要问题是当我进行实际递归时。我知道有些不对劲,但是.. 如果您能指出我正确的方向,我将非常感激。

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

编写一个递归的、布尔值的函数 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: 错误: ']' 标记之前的预期主表达式

第二行是否给出错误,因为我的第一个参数中的括号为空?

【问题讨论】:

  • 如果您需要int arr[],您认为arr[((n - 1) - n) + 1] 是什么?
  • 当参数需要整个数组时,您正在传递数组的元素。

标签: c++ arrays if-statement recursion palindrome


【解决方案1】:

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

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

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

arr[index]

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

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

【讨论】:

    【解决方案2】:

    在这种情况下,编译器建议实际上对您很有帮助。

    CTest1.cpp:9: error: invalid conversion from 'int' to 'int*'
    

    这是说你给函数一个 int,而函数期望一个 int*。

    CTest1.cpp:9: error:   initializing argument 1
    

    是说问题出在参数 1 中。

    现在到您的代码。看到这一行:

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

    您可以看到您发送的第一个参数不是 int*(即不是指向数组的指针),而是数组的一个元素。您正在发送一个 int 作为第一个参数。

    考虑到这一点,尝试重新编写代码。

    【讨论】: