【发布时间】:2013-12-17 08:12:30
【问题描述】:
我已经被困了好几个小时,试图弄清楚如何编写一个获取整数数组的函数,并使用递归和根本没有循环来找到数组中最长的升序子系列的长度。我只允许使用另外 1 个递归函数 例如,对于以下数组:{45,1,21,3,3,6,53,9,18},outpot 应该是 5,因为最长的子序列是 {1,3,6,9,18 }。 因此,基本上,一个函数获取一个数组及其大小,并且需要打印最长子系列的长度,根本不使用循环,没有全局/静态类型,它可能使用另一个“帮助”递归函数,就是这样它。 这几乎就是我想出的全部,而且它一团糟,而且效果不佳。 我正在尝试扫描数组,而我一直都知道我正在查看的当前索引、与当前进行比较的索引以及我开始当前子系列的原始索引。 我试图在知道应该比较的索引的同时扫描数组,但我被卡住了,这就是我得到的,我真的很感激任何提示和建议。 谢谢。
void max_set(int arr[], int size)
{
int bigSeries[2] = { 0 };
calcSeries(arr, bigSeries,0, 0, 1, size -1, 1);
printf("number of max parts going up %d \n", bigSeries[0]);
}
void calcSeries(int arr[], int bigSeries[],int originalCHeckedIndex, int checkedIndex, int currentIndex, int lastIndex, int ascending)
{
if ((checkedIndex == lastIndex) || (currentIndex > lastIndex))
{
if (ascending > bigSeries[0])
bigSeries[0] = ascending;
if (originalCHeckedIndex == lastIndex)
return;
else
{
calcSeries(arr, bigSeries, originalCHeckedIndex + 1, originalCHeckedIndex + 1, originalCHeckedIndex + 2, lastIndex, 0);
return;
}
}
if (arr[currentIndex] > arr[checkedIndex])
{
calcSeries(arr, bigSeries, originalCHeckedIndex, currentIndex, currentIndex + 1, lastIndex, ascending + 1);
}
else
{
if (arr[originalCHeckedIndex] < arr[currentIndex])
calcSeries(arr, bigSeries, currentIndex, currentIndex, currentIndex + 1, lastIndex,ascending);
calcSeries(arr, bigSeries, originalCHeckedIndex, checkedIndex, currentIndex + 1, lastIndex, ascending);
}
}
【问题讨论】:
-
尝试先用循环做,这样你就明白逻辑了...
-
只需使用循环即可。 C 支持循环。