2017-02-17 82 views
-1

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

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

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

我该如何解决这个问题?

+1

我认为他们打算让你编写一个辅助方法并从单参数方法中调用它。 –

+1

如果你要练习递归,你应该选择本质递归的问题。不适合使用递归的原因。这就像是买一把新的链锯,并决定用它来雕刻火鸡。递归可能非常强大,但在许多情况下它并不合适。 –

+0

Miam turkey;)无论如何,你总是可以返回索引而不是将其作为参数传递。 – JFPicard

回答

1

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

保持原样(仅将length()替换为length)。
超载它的另一种方法:

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

然后在你的代码,你可以去:

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

的问题是:这个问题不能真正使用递归解决 - 假设你只有可以传递数组本身。

问题是:你必须知道哪些指标增加了三倍;而不是。

换句话说:你不知何故必须作弊;你将不得不在某处保留一些助手变量,告诉你最近处理过的索引;或类似的东西。

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

含义:当你真的限制自己到一个方法,只需要数组作为参数,那么你不能解决这个难题!