我一直在练习递归,试图让它更舒服,但这一个问题一直困扰着我。
我应该写一个递归程序,它使数组的每个元素增加三倍。起初,它似乎很简单。
public static void triple (int[] a, int index) {
if (index < a.length()) {
a[index]*=3;
triple(a, index + 1);
}
}
但是当我再次看到这个问题时,我意识到我犯了一个错误。该方法的参数只应该是没有索引的整数数组。
我该如何解决这个问题?
答案 0 :(得分:1)
此问题不是使用递归解决的最佳问题。
保持方法不变(仅将length()
替换为length
)
用另一种方法重载它:
public static void triple(int[] a) {
triple(a, 0);
}
然后在您的代码中,您可以选择:
int[] t = {1, 2, 3};
triple(t);
答案 1 :(得分:0)
问题是:使用递归无法真正解决此问题 - 假设您仅可以传递数组本身。
关键是:你必须知道哪些索引已经增加了三倍;哪个没有。
换句话说:你不得不作弊;你必须在某处保留一些辅助变量来告诉你最后处理的索引;或类似的东西。
但正如所说;这意味着要实施一个解决方案......只能通过“按摩”要求来实现。
含义:当你真正限制自己只使用数组作为参数的一个方法时,你无法解决这个难题!