Iは、次のコードが与えられました:分析ランタイムが
public class alg
{
public static int hmm (int x)
{
if (x == 1)
{
return 2;
}
return 2*x + hmm(x-1);
}
public static void main (String[] args)
{
int x = Integer.parseInt(args[0]);
System.out.println(hmm(x));
}
}
だから、最初の質問は、このアルゴリズムは何を数えるのでしょうか? 私はちょうどタイプして、 日食でそれをrunnedしたので、私はそれが何をよりよく見ることができます(それは前に擬似コードでした、私はコードを入力したのでここにそれを入力できませんでした)。私はこのアルゴリズムが次のことを認識しています:それは入力を受け取り、次の数でそれを掛けます。 だから例として:
input = 3, output = 12 because 3*4 = 12.
Or Input = 6, output 42 because 6*7 = 42.
さてさて、次の質問は私の問題です。私はこのアルゴリズムのランタイムを分析するように求められますが、どこから始めたらいいかわかりません。 私は最初に、xを定義するとき、すでに持っていると言うでしょう。time = 1
ifループはtime = 1
も与えます。 最後の部分は、return 2x + alg(x-1)
は "something^x"または..? だから私たちは+ 2 "^ X何か" のようなものを持って最後に、私はthatsの権利を疑う:/
編集を、あまりにも擬似コードを入力するために管理:)
Input: Integer x with x > 1
if x = 1 then
return 2;
end if
return 2x + hmm(x-1);
ループがないため、実行時間は再帰回数に比例します。ただ一つの再帰ステップ 'hmm(x-1)'と 'x> 0'と仮定するので、再帰の回数は単に' x - 1'です。 – dhke
アルゴリズムが入力 '6'に' 42'を返すことは確かですか?アルゴリズムは '2^x * x! 'を返しませんか? – Codor
@Codorもし私が裁判官であれば、 'x²+ x'を返すべきです。それは再帰を介して算術進行の二倍を計算する。 – dhke