2

我被困在做大学作业。任务是找到一种递归然后动态编程的方法来计算数组的最长、后继、升序子序列的长度。例如,如果数组是: {4 , -5 , -3, -2, 5, -2, 0, 3 , 2} 最大长度将是 4 子序列 {-5, -3, -2, 5 }。我很难找到递归方式,如果没有递归方式,就不可能为我找到动态方式。
我尝试过编程,但我知道这是错误的,我不知道如何修复它:

public static int length(int[] arr,int j)
{
    if(arr.length == 1)
    {
        return 1;
    }
    if(j == 1)
    {
        if(arr[j-1] < arr[j])
        {
            return 1;
        }
        else
        {
            return 0;
        }
    }
    else
    {
        int c = length(arr,j-1);
        if(arr[j-1] < arr[j])
        {
            return 1 + c;
        }
        else
        {
            return 0;
        }
    }
}
4

1 回答 1

0

尝试这个 :

int length(int index, int previous)
    {
       if(arr.length == (index+1))
            return 0;
       else 
           if(arr[index] > previous)
               return 1+length(index+1,arr[index]);
           else return length(index+1,previous)
    }

也许您不需要通过创建一个静态变量在每个递归调用中将数组作为参数,

Previous是子序列的最新元素

于 2015-05-20T14:12:22.873 回答