myProgrammingLab"回文"挑战和递归

时间:2014-11-13 12:26:48

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

我参加了编程课程的介绍,并通​​过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:错误:在']'之前预期的主要表达式令牌

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

2 个答案:

答案 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作为第一个参数。

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