c++ - 使用递归的数组总和错误(编译和运行时)
问题描述
我被要求使用递归对数组中的数字求和,其中将提供样本输入,编译器给了我以下错误(注意,我尝试了三种方法并得到了相应的错误)。有人可以向我解释我在这里做错了什么吗?
代码 1 的错误
In file included from Runner.cpp:2:0:
Solution.h: In function 'int sum(int*, int)':
Solution.h:7:32: error: invalid conversion from 'int' to 'int*' [-fpermissive]
totalsum = totalsum + sum(n+1,n-1);
^
Solution.h:1:5: note: initializing argument 1 of 'int sum(int*, int)'
int sum(int input[], int n) {
^
代码 2 错误
Solution.h: In function 'int sum(int*, int)':
Solution.h:5:24: error: invalid conversion from 'int' to 'int*' [-fpermissive]
return input[0] + sum(n+1,n-1);
^
Solution.h:1:5: note: initializing argument 1 of 'int sum(int*, int)'
int sum(int input[], int n) {
^
代码 3 错误
Runtime error
代码 1
int sum(int input[], int n) {
if (n<=0)
{
return 0;
};
int totalsum;
totalsum = totalsum + sum(n+1,n-1);
return totalsum;
}
代码 2
if (n<=0)
return 0;
return input[0] + sum(n+1,n-1);
代码 3
if (n <= 0)
return 0;
return (sum(input, n +1) + input[n - 1]);
解决方案
在这个函数实现中
int sum(int input[], int n) {
if (n<=0)
{
return 0;
};
int totalsum;
totalsum = totalsum + `sum(n+1,n-1)`;
return totalsum;
}
声明为 like 的第一个参数int input[]
的类型为int *
。n + 1
但是,您将整数作为递归调用中的参数传递,而不是数组
sum(n+1,n-1)
此代码段中存在相同的问题
if (n<=0)
return 0;
return input[0] + sum(n+1,n-1);
在第二个代码片段中,似乎有超出数组的访问内存
return (sum(input, n +1) + input[n - 1]);
^^^^
此外,调用具有无限递归,因为第二个参数总是增加:n + 1
.
函数可以写成
long long int sum( const int a[], size_t n )
{
return n == 0 ? 0 : a[0] + sum( a + 1, n - 1 );
}
另一种方法如下
long long int sum( const int a[], size_t n )
{
return n == 0 ? 0 :
( n == 1 : a[0] ? sum( a, n / 2 ) + sum( a + n / 2, n - n / 2 ) );
}
这是一个演示程序
#include <iostream>
long long int sum( const int a[], size_t n )
{
return n == 0 ? 0
: ( n == 1 ? a[0] : sum( a, n / 2 ) + sum( a + n / 2, n - n / 2 ) );
}
int main()
{
int a[] = { 1, 2,3, 4,5, 6, 7, 8, 9, 10 };
const size_t N = sizeof( a ) / sizeof( *a );
std::cout << sum( a, N ) << '\n';
return 0;
}
它的输出是
55
推荐阅读
- javascript - 确认/取消 SweetAlert 都得到确认
- restructuredtext - 如何使用 rst2pdf 样式表右对齐部分编号
- python - 比较长度不等的字符串时返回差异索引
- html - 如何通过电子邮件模板禁用暗模式
- python - ValueError:形状(无,5)和(无,1000)不兼容
- python - 如何更新包含字典数据的列表?
- c++ - 在 C++ 中按名称访问结构字段的现代方法
- javascript -
- python - Snakemake:如何在没有显式输出文件的情况下创建规则,而只有指定的输入和日志文件?
- sql-server - SSAS 中的维度汇总