#include<iostream>
using namespace std;
int theProduct(int anArray[], int n);
int main(int argc, const char * argv[])
{
int myArray[3] = {1, 2, 3};
cout << "The product of the array elements of myArray is "<<theProduct(myArray,3)<<endl;
return 0;
}
int theProduct(int anArray[], int n)
{
if (n <= 0)
return 0;
else if (n == 1) //base case
return anArray[0] * anArray[1];
else
return anArray[n] * theProduct(anArray, n - 1);
}
我预计我的输出是 6,而不是我的输出是“myArray 的数组元素的乘积是 1048565344” 请告诉我我做错了什么。
最佳答案
如果大小是 1
你只有一个元素,因此在
else if (n == 1) //base case
return anArray[0] * anArray[1];
您实际上是在访问 anArray[1]
时越界了。
在:
else
return anArray[n] * theProduct(anArray, n - 1);
如果大小为 n
,则无法访问 anArray[n]
,因为元素的计数范围是从 0
到 n-1
。例如,在您的数组中,大小为 3
,但元素具有索引:0, 1, 2
。
你的意思是这样的:
int theProduct(int anArray[], int n) {
if (n <= 0)
return 0;
else if (n == 1)
return anArray[0];
else
return anArray[n-1] * theProduct(anArray, n - 1);
}
正确输出 6
。
关于c++ - 编写递归 C++ 函数,计算并返回数组中整数的乘积,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23229574/