myProgrammingLab "palindrome" 挑战和递归
myProgrammingLab "palindrome" challenge and recursion
我正在上一堂编程入门课,通过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)'"
作为建议,我可以向你保证,这并没有多大帮助。Lol
我认为我的主要问题是当我到达实际的递归时。我知道有点不对劲,但是。。如果你能为我指明正确的方向,我将不胜感激
"数组回文"是一个数组,当其元素反转时,保持不变(即,当向前或向后扫描时,数组的元素相同)
编写一个递归的布尔值函数isPalindome,它接受一个整数值数组和元素数,并返回该数组是否为回文。
数组是一个回文,如果:数组为空(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 isPalindome(int*,int)"中:CTest1.cpp:9:错误:在']'标记之前需要主表达式
第二行是不是因为我的第一个参数中的括号为空而出现错误?
当递归调用isPalindrome
时,会传递以下两个参数
isPalindrome(arr[((n-1) - n) +1], n)
第二个很好,但第一个参数的值为
arr[index]
这只是从数组中索引一个值,并将计算为int
。由于它正在寻找int*
,或者换句话说,要开始的元素的地址,因此可以通过
&arr[((n-1) - n) +1]
在这种情况下,编译器的建议实际上对您非常有帮助。
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作为第一个参数。
考虑到这一点,尝试重新编写代码。
- 通过递归进行因子分解
- 递归函数计算序列中的平方和(并输出过程)
- 使用递归的数组的最小值.这是怎么回事
- 递归列出所有目录中的C++与Python与Ruby的性能
- 递归计数给定目录的文件和所有目录
- 如何在BST的这个简单递归实现中消除警告
- C++:正在检查LinkedList中的回文-递归方法-错误
- 递归模板化函数不能分配给具有常量限定类型"const tt &"的变量"state"
- 递归无序映射
- TSP递归解的迭代形式
- 如何在Elixir中调用递归函数并行
- 返回递归调用和仅递归调用的区别
- 数组元素打印的递归方法
- 使用递归时获取变量的奇怪值
- 如何在C++中递归地按相反顺序打印集合
- 到连接组件算法的问题(递归)
- 如何使用递归打印修改后的星号三角形图案
- 使用递归模板动态分配的多维数组
- 递归函数有效,但无法记忆
- myProgrammingLab "palindrome" 挑战和递归