私はプロジェクト Euler を進めていましたが、組み合わせの問題に遭遇しました。組み合わせロジックとは、階乗を計算することを意味します。そこで、factorial メソッドを作成することにしました。そして、問題にぶつかりました - これを行うために反復と再帰の両方を非常に簡単に使用できるため、どちらを使用する必要がありますか? 私はすぐに2つの方法を書きました-反復:
public static long factorial(int num) {
long result = 1;
if(num == 0) {
return 1;
}
else {
for(int i = 2; i <= num; i++) {
result *= i;
}
return result;
}
そして再帰的:
public static long factorial(int num) {
if(num == 0) {
return 1;
}
else {
return num * factorial(num - 1);
}
}
ここで (明らかに) 速度と機能について話している場合、どちらを使用する必要がありますか? そして、一般的に、どちらかのテクニックが他のテクニックよりも一般的に優れているのでしょうか?