数字串的最大和子串;递归改非递归

#include "stdafx.h"
const int MIN = 1<<31;
void getMaxSumSub(int* arr, int first, int last)
{
int begin,end,curbegin;
int sum,summax;
begin = end = curbegin = first;
sum = 0;
summax = MIN;
for(int i=first;i<=last;i++)
{
if(sum <= 0)
{
curbegin = i;
sum = arr[i];
}
else 
{
sum += arr[i];
}
if (sum>=summax)
{
begin = curbegin;
end = i;
summax = sum;
}
}
printf("max:%d\tstart:%d,end:%d",summax,begin,end);
}
int main()
{
int array[] = {-10, -3, -7, -8};//{-3, 4, 9, 2, -10, -7, 11, 3, -8};//{-1,2,6,-3,5,-7,14,-5,-15,1,8,-4,9};
getMaxSumSub(array,0,sizeof(array)/4-1);
getchar();
return 0;
}
2.递归改非递归

递归:在函数中调用自身的程序过程。深度优先。

递推:用堆栈来代替递归要完成的过程。可实现广度优先或深度优先。
迭代:深度是可以预见的,所以不需要递归和递推来实现,直接把代码嵌套写下去就行。for for for就是典型的迭代。

尾递归可以改成迭代,其它的递归不可以。 

posted @ 2010-12-20 21:30  caotangwa  阅读(426)  评论(0编辑  收藏  举报