使用递归对数组的每个元素进行三倍处理

时间:2017-02-17 18:12:24

标签: java arrays recursion

我一直在练习递归,试图让它更舒服,但这一个问题一直困扰着我。
我应该写一个递归程序,它使数组的每个元素增加三倍。起初,它似乎很简单。

public static void triple (int[] a, int index) {
    if (index < a.length()) {
        a[index]*=3;
        triple(a, index + 1);
    }
}

但是当我再次看到这个问题时,我意识到我犯了一个错误。该方法的参数只应该是没有索引的整数数组。

我该如何解决这个问题?

2 个答案:

答案 0 :(得分:1)

此问题不是使用递归解决的最佳问题。

保持方法不变(仅将length()替换为length) 用另一种方法重载它:

public static void triple(int[] a) {
    triple(a, 0);
}

然后在您的代码中,您可以选择:

int[] t = {1, 2, 3};
triple(t);

答案 1 :(得分:0)

问题是:使用递归无法真正解决此问题 - 假设您可以传递数组本身。

关键是:你必须知道哪些索引已经增加了三倍;哪个没有。

换句话说:你不得不作弊;你必须在某处保留一些辅助变量来告诉你最后处理的索引;或类似的东西。

但正如所说;这意味着要实施一个解决方案......只能通过“按摩”要求来实现。

含义:当你真正限制自己只使用数组作为参数的一个方法时,你无法解决这个难题!