c++ - 编写递归 C++ 函数,计算并返回数组中整数的乘积

标签 c++ recursion

#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],因为元素的计数范围是从 0n-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);
}

Live demo

正确输出 6

关于c++ - 编写递归 C++ 函数,计算并返回数组中整数的乘积,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23229574/

相关文章:

c++ - 将类对象实例作为参数从 main() 传递给另一个类对象实例

java - 使用递归的 StackOverflowError

c++ - 递归如何在此代码中工作?

c++ - 冰雹序列 C++ 递归

c++ - 如何将 OpenMP 和 MPI 导入大型 CLion CMake 项目?

c++ - 为什么 C++ 在除法时不返回 double?

c++ - 仅使用 C/C++ API 写入期间的 iOS 文件大小

Java 如何使用递归函数返回列表的大小

java - 存储由递归方法生成的数组

c++ - 从 Windows API 获取计算机的域名