【问题标题】:Recursion Sequence递归序列
【发布时间】:2014-07-26 17:01:07
【问题描述】:

我正在尝试编写一个程序,使用递归检查数组中是否存在序列 {2,4,6,8} 将返回 true,而 (2,4,6,5} 将返回 false。 这就是我到目前为止所拥有的...... TIA

private static boolean arrPattern(int[] arr)
{
    int sequence =arr[1]- arr[0]; 

    for (int i=1;i<arr.length;i++)
        for(int j=2;j<arr.length;j++)
    {
        if (sequence == (arr[j]- arr[i]) & arr.length>0)
        {
            send the subarray (recursive)
        }
        else if (j-i !=sequence)
                     return false;
                    else
            return true;
    }

}

正如您所说,我不确定如何再次将子数组发送到该方法。我相信我已经有了基本的想法,只需要弄清楚最后一部分。

我知道你可以简单地用一个数组列表而不是一个简单的数组来做到这一点,但我想用一个数组来解决这个问题。

【问题讨论】:

    标签: java recursion arrays


    【解决方案1】:

    您可以通过传递一个数组和一个起始参数来做到这一点:

    private static boolean arrPattern(int[] arr)
    {
        return arrPattern(int[] arr, 0);
    }
    
    private static boolean arrPattern(int[] arr, int startpos)
    {
        ...
    }
    

    在你的递归调用中传递startpos + 1,然后检查startpos是否在末尾。

    【讨论】:

      【解决方案2】:

      不要传递子数组,而是向您的函数添加另外两个参数 - 您当前正在考虑的数组的开始和结束索引(或开始索引和长度)。然后在进行递归调用时,为这两个参数传递数组和新值。

      注意:由于静态数组是通过指向其第一个元素的指针传递的,因此不会在每次调用时复制元素。

      注意:事实上,使用递归解决这个问题比使用迭代解决它更难。

      【讨论】:

        猜你喜欢
        • 2014-11-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-05-18
        • 2013-03-23
        • 2019-07-08
        相关资源
        最近更新 更多