我需要编写一个函数,该函数可以在数字列表中找到最长的(不一定是连续的)升序子序列。该函数需要递归。

我的算法有问题,无法弄清楚如何解决。这是一个示例开始列表:



正确的结果是:



我想在屏幕上打印此子序列的长度,在这种情况下为5。

我的功能:

int subseires(int arraysub[], int small, int i, int j, int coun){
    if( i==size ) return 0;

    if( arraysub[i]>arraysub[j] )
        subseires(arraysub, small, i+1, j+1, coun);

    if( arraysub[i]<arraysub[j] )
        subseires(arraysub, small, i, j+1, coun+1);

    return coun;
}

任何人都可以通过指出我的程序存在的问题来提供帮助吗?

最佳答案

您的算法很可能是错误的。

您需要为阵列中的每个成员进行选择-如果可以选择它(它不小于您选择的上一个),然后递归检查两个选项:选择它还是不选择它。这样,您可以走到数组末尾并返回总长度。最后,您打印出最长的长度。

尝试在C函数中实现此算法。

10-08 05:12