です。メソッドがインスタンス変数やメソッドを参照していない場合、静的にすることができます。それはそれが静的にされるべきではありません(実際にはこの質問の範囲にはありません)。そのロジックを再帰的メソッドに適用することは、おそらく共通の仮定を作ることですが、必ずしも正しいとは限りません。 do_something_with_that_file()は、その後、まだ再帰的な方法は、静的なことができませんでした、インスタンスメソッドである場合、
doForEveryFile(File root)
{
if (root.isFile()) do_something_with_that_file(root);
else if (root.isDirectory())
{
for (File next_file : root.listFiles()) doForEveryFile(next_file);
}
}
しかし、その場合には:
共通再帰的な操作は、ファイル、のようなものを反復処理されます。それが静的であれば、これは静的な再帰的メソッドである可能性があります。したがって、この単純なケースでも、再帰自体が静的であるかどうかの明確な要因ではないことは明らかです。完全に静的だ
// sum all numbers from one to our given value
class StaticRecursive {
public static int sumTo(int max) { return recursiveSum(); }
private static int recursiveSum(int currentSum, int currentValue, int max)
{
if (currentValue == max) return currentSum;
else return recursiveSum(currentSum + currentValue, currentValue + 1, max);
}
}
:
我々はまた、静的な数学の場合、バージョン1を書くことができます。私の代わりにそれが好きで書くことができる:
class InstanceRecursive {
private int max;
private int sum;
public int sumTo(int max) {
this.max = max;
this.sum = 0;
return recursiveSum(0);
}
public void recursiveSum(int currentValue)
{
if (currentValue == this.max) return;
else {
sum += currentValue;
recursiveSum(currentValue + 1);
}
}
は、これらの2は基本的に同じもの、インスタンス変数、インスタンス変数と1なしのいずれかを実行します。違いは何ですか?あまりない。インスタンスのバージョンは、より少ないスタックスペースを使用しますが、それはそれです。とにかく、staticはインスタンス変数/メソッド参照と関係があります(存在しない場合は静的である可能性があります)。哲学的には、メソッドが静的である可能性がある場合、それはなぜそのクラスの一部ですか?再帰は考慮すべき興味深いケースかもしれませんが、それが静的であるかどうかについての再帰的メソッドに関して特別で特別なものは何もありません。
静的メソッドを保証するパラメータではなく、インスタンス変数です。インスタンス変数を取得または設定するメソッドは、静的にすることはできません。デフォルトのコンストラクタで初期化されたオブジェクトでも、インスタンスメソッドで使用できるインスタンス変数があります。 – 4castle
インスタンス変数に依存しない場合は静的にすべきであるというコメントはまったく間違っています。それを信じてはいけません。 –
あなたの質問の前提は間違っています。 – Raedwald