【发布时间】:2015-09-28 15:29:30
【问题描述】:
可以使用递归找到最大和的连续子数组,以便函数直接返回输出。
下面是我的解决方案,我将最大子数组存储在每个索引处,然后在 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它不是 -
如果你不知道最大和序列的开始和结束位置,那么保留这个数组有什么意义
标签: c arrays recursion dynamic-programming contiguous