用于测试数组元素是否与某些索引相等的递归

时间:2017-03-27 18:50:21

标签: java recursion

我正在学习递归,但我无法理解为什么这种方法不能正常工作。

public static boolean theSame(int[] arr, int start, int end) {
        if(arr[start]==arr[end]) {
            if(start!=end) {
                start++;
                theSame(arr, start, end);
            }
            else {
                return true;
            }
        }
        return false;

}

数组是4, 4, 4, 4, 4, 4,我正在从索引1和5中测试它。是什么给出的?为什么不起作用?我假设它与if(start!=end)条件有关,但我不确定。

我忘了添加,当它应该明确返回true时,该方法返回false。

2 个答案:

答案 0 :(得分:6)

 func application(_ application: UIApplication, supportedInterfaceOrientationsFor window: UIWindow?) -> UIInterfaceOrientationMask {
        let presentedViewController = UIHelper.topViewController()
        if presentedViewController is orientationIsOnlyLandscape {
            return .landscape
        }
        return .portrait
    }

你可以在一行中完成。

public static boolean theSame(int[] arr, int start, int end) {
    if(arr[start]==arr[end]) {
        if(start!=end) {
            start++;
            theSame(arr, start, end);  // here's your problem
            // return theSame(arr, start, end); might work better
        }
        else {
            return true;
        }
    }
    return false;
}

答案 1 :(得分:1)

您只需要替换

theSame(arr, start, end);

return theSame(arr, start, end);

在现有实现中,inner方法调用返回的值将被忽略,最终返回false(最后一行)。以下应该可以正常工作:

public static boolean theSame(int[] arr, int start, int end) {
    if (arr[start] == arr[end]) {
        if (start != end) {
            start++;
            return theSame(arr, start, end);
        } else {
            return true;
        }
    }
    return false;
}