我正在上编程入门课,很大一部分材料是通过我的编程实验室钻入我们的头脑的。我对递归的概念有一点疑问…对我来说有点命中或错过。这个特殊的问题让我难倒了。当我提交代码时,它给我提供了
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)'"
作为建议,我可以向你保证这不是很有帮助。哈哈
我认为我的主要问题是当我到达实际的递归时。我知道有些不对劲,但是…如果你能给我指出正确的方向,我将非常感激。
“数组回文”是一个数组,当其元素颠倒时,它保持不变(即,数组的元素在向前或向后扫描时是相同的)
编写一个递归的布尔值函数isPalin的函数,它接受一个整数值数组和元素的数量,并返回数组是否是回文。
如果数组为空(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]==isPalin的(arr[], n-1))
现在我得到提示“我们认为您可能想要考虑使用。”我看不出添加在这里适用于哪里。我不认为它在谈论递增,因为它像在代码中一样将递增引用为“”。
我还收到错误消息:
CTest1. cpp:在函数“bool isPalin的(int*,int)”中:CTest1.cpp:9:错误:在“]”令牌之前预期的主表达式
第二行是否因为我的第一个参数中括号为空而出现错误?
当您递归调用isPalin的
你传递这两个参数
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作为第一个参数。
考虑到这一点,尝试修改您的代码。