【发布时间】:2012-07-25 03:24:21
【问题描述】:
我需要只使用一个递归函数来找到最长的单调递增子序列的长度。
例如,给定一个arr={45 1 21 3 33 6 53 9 18},它需要返回 5。我已经开始编写代码但我卡住了,我不知道如何找出哪个调用给出了最大长度。
函数longestSet是我的辅助函数,我可以使用我想要的任何变量,但必须从函数max_set调用。
void question3(int question)
{
int *arr, size;
printf("enter the array size\n");
scanf("%d", &size);
arr=(int*)malloc(size*sizeof(int));
fillArr(arr, size-1);
max_set(arr, size);
free(arr);
}
void max_set(int arr[], int size)
{
int i=0, finelmax=0, count=0,longrising;
longrising=longestSet(arr,size,i,finelmax,count);
printf("the length of the longest risind set is: %d", longrising);
}
int longestSet(int arr[], int size, int i, int finelmax, int count)
{
if(i==size)
return count;
if(arr[i]>=finelmax)
{
finelmax=arr[i];
return longestSet(arr,size,i+1,finelmax,count+1);
}
return longestSet(arr,size,i+1,finelmax,count);
}
【问题讨论】:
-
欢迎来到 SO。术语“集合”非常具有误导性,因为集合根据定义是无序的并且不能上升。 “序列”更合适,我会编辑它。另外,这是作业吗?习惯上用
homework标签标记作业。 -
我在这里看不到任何 C++ 代码,所以我将其标记为 C 问题。如果两种语言都适合您,请在 C 标记旁边再次添加 C++ 标记。
-
不,不要同时添加 C 和 C++ 标签。它们是非常不同的语言,它们意味着非常不同的答案。选择一个并坚持下去。
-
这个问题可以简化为在二进制字符串中找到最长的'1'序列。也许这可能会有所帮助? - 或者可能不 - 该示例与我理解的问题描述不匹配。