我参加了编程课程的介绍,并通过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)'"
作为建议,我可以向你保证不是很有帮助。洛尔
我认为我的主要问题是当我进入实际的递归时。我知道有些事情已经消失,但是......如果你能指出我正确的方向,我会非常感激。
A'阵列回文'是一个数组,当它的元素反转时,它保持不变(即,当向前或向后扫描时,数组的元素是相同的)
编写一个递归的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:错误:在']'之前预期的主要表达式令牌
第二行是否给出了错误,因为在我的第一个参数中括号是空的?
答案 0 :(得分:1)
当你递归调用isPalindrome
时,你传递了这两个参数
isPalindrome(arr[((n-1) - n) +1], n)
第二个很好,但第一个参数评估为
arr[index]
这只是为数组索引一个值,并将评估为int
。既然它正在寻找int*
或者换句话说,要开始的元素的地址,你可以传递
&arr[((n-1) - n) +1]
答案 1 :(得分:0)
在这种情况下,编译器建议实际上对你很有帮助。
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作为第一个参数。
考虑到这一点,尝试重新编写代码。