したがって、この再帰的な教員機能がどのように機能するかは誰もが知っています。
public static int fac(int number) {
return (number > 1) ? number * fac(number - 1) : number;
}
引数として5を使用してこれを呼び出すと、次のように評価されます。
return 5 * 4 * 3 * 2 * 1
ここまでは順調ですね。しかし、返したい値を連結できない場合はどうなりますか?たとえば、いくつかのリストを返したい場合:
public static List<Integer> getSubarraysOf(List<Integer> array) {
if (array.size() <= 1) {
return array;
}
return array + getSubarraysOf(array.subList(1,array.size() - 1));
}
もちろん、これは機能しません!これが機能すると想像できる唯一の方法は、結果のリストが追加されるグローバル変数(リストを含むリスト)を参照するか、結果のリストをパラメーターとして導入することです。どちらの解決策もにおいがするので、私よりも賢い解決策があるのではないかと思います。
このような解決策をお探しですか
public static void main(String [] args)
List<Integer> list = new ArrayList<>();
for (int i = 1; i < 6; ++i) list.add(i);
System.out.println("1### " + list);
System.out.println("2### " + getSubArraysOf(list));
}
private static List<Integer> getSubArraysOf(List<Integer> array) {
List<Integer> result = new ArrayList<>();
for (int i = 0; i < array.size(); ++i) {
result.addAll(array.subList(0, array.size() - i));
}
return result;
}
以下の結果が得られました
1### [1, 2, 3, 4, 5]
2### [1, 2, 3, 4, 5, 1, 2, 3, 4, 1, 2, 3, 1, 2, 1]
または多分そのような
public static void main(String [] args)
List<Integer> list = new ArrayList<>();
list.add(5);
System.out.println("1### " + list);
System.out.println("2### " + getSubArraysOf(list));
}
private static List<Integer> getSubArraysOf(List<Integer> array) {
int lastItem = array.get(array.size() - 1);
if (lastItem == 1) return array;
array.add(--lastItem);
return getSubArraysOf(array);
}
結果で
1### [5]
2### [5, 4, 3, 2, 1]
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加