Java 使用递归将数组的每个元素三重化

Java 使用递归将数组的每个元素三重化,java,arrays,recursion,Java,Arrays,Recursion,我一直在练习递归,试图让它更舒服,但这个问题一直困扰着我。 我应该编写一个递归程序,将数组的每个元素增加三倍。起初,这似乎很简单 public static void triple (int[] a, int index) { if (index < a.length()) { a[index]*=3; triple(a, index + 1); } } publicstaticvoidtriple(int[]a,int索引){ 如果(索引

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

public static void triple (int[] a, int index) {
    if (index < a.length()) {
        a[index]*=3;
        triple(a, index + 1);
    }
}
publicstaticvoidtriple(int[]a,int索引){
如果(索引
但当我再次审视这个问题时,我意识到我犯了一个错误。该方法的参数仅假定为不带索引的整数数组


如何解决这个问题?

这个问题不是用递归解决的最佳问题

保持方法不变(仅将
length()
替换为
length

用另一种方法重载它:

public static void triple(int[] a) {
    triple(a, 0);
}
然后在代码中,您可以选择:

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

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

关键是:你必须知道哪些索引已经翻了三倍;但事实并非如此

换句话说:你必须以某种方式欺骗;您必须在某个地方保留一些helper变量,告诉您最后处理的索引;或者类似的东西

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


意思是:如果你真的把自己限制在一个只以数组为参数的方法上,那么你就无法解决这个难题

我想他们打算让你写一个helper方法并从单参数方法调用它。如果你要练习递归,你应该选择本质上是递归的问题。在不合适的地方,不要为了递归而使用递归。这就像买了一把新链锯,决定用它来切火鸡。递归可能非常强大,但在许多情况下并不合适。Miam turkey;)无论如何,您总是可以返回索引,而不是将其作为参数传递。