可以使用递归找到最大的sum连续子数组,这样函数将直接返回输出。使用递归直接输出结果的最大连续子阵列
下面是我的解决方案,其中我在每个索引处存储最大子数组结尾,然后在print()函数中找到最大子数组。不过,我想下面的
- 使用递归
- 使用递归函数直接输出最终结果。
我的代码使用递归函数和助手print()函数来找到这些数字中最大的
#include <stdio.h>
//int a[] = {-6,60,-10,20};
int a[] = {-2, -3, 4, -1, -2, 1, 5, -3};
int len = sizeof(a)/sizeof(*a);
int maxherearray[10];
int main(void)
{
fun(len-1);
printf("max sub array == %d\n",print(maxherearray));
printf("\n");
return 0;
}
int fun(int n)
{
if(n==0)
return a[n];
maxherearray[n] = max(a[n], a[n]+fun(n-1));
return maxherearray[n];
}
int max(int a, int b)
{
return (a > b)? a : b;
}
编辑:过帐,我莫名其妙地错过了
的print()函数//Please make sure that #include <limits.h> is added
int print(int a[])
{
int i = 0;
int largest = INT_MIN;
printf("largest == %d\n",largest);
for(i=0;i<len;i++)
{
if(a[i] > largest)
largest = a[i];
}
return largest;
}
你可以粘贴你的'print'帮助函数吗? –
我无法理解'maxherearray [i]'在你的程序中存储了什么?它是否存储了最大的连续元素总和,直到'i'包含?例如,在你的例子中,'maxherearray [6]'是7和'maxherearray [7]'是4,所以对于'i = 6'这是真的,但对于'i = 7'不是 – mangusta
这是什么意思如果不能确定最大和序列开始和结束的位置,请保留该数组 – mangusta