再帰方程式を使用してプログラムの時間計算量を調べたいです。あれは ..
int f(int x)
{
if(x<1) return 1;
else return f(x-1)+g(x);
}
int g(int x)
{
if(x<2) return 1;
else return f(x-1)+g(x/2);
}
その再帰方程式を書いて解こうとしたのですが、どんどん複雑になっていきます
T(n) =T(n-1)+g(n)+c
=T(n-2)+g(n-1)+g(n)+c+c
=T(n-3)+g(n-2)+g(n-1)+g(n)+c+c+c
=T(n-4)+g(n-3)+g(n-2)+g(n-1)+g(n)+c+c+c+c
……………………….
……………………..
Kth time …..
=kc+g(n)+g(n-1)+g(n-3)+g(n-4).. .. . … +T(n-k)
Let at kth time input become 1
Then n-k=1
K=n-1
Now i end up with this..
T(n)= (n-1)c+g(n)+g(n-1)+g(n-2)+g(n-3)+….. .. g(1)
これ以上解決できません。いずれにせよ、このプログラムで関数呼び出しの数を数えると、時間の複雑さが指数関数的であることは簡単にわかりますが、再帰を使用して証明したいと思います。どうすればできますか?
Anwer 1の説明は正しいように見えますが、私が行ったのと同様の作業です。
このコードで最も難しい作業は、再帰方程式を書くことです。私は別の図を描きました , 私はいくつかのパターンを特定しました . この図から、可能な再帰方程式の助けを得ることができると思います
And I came up with this equation , not sure if it is right ??? Please help.
T(n) = 2*T(n-1) + c * logn