4

次のように、再帰関数を実行してn番目のフィボナッチ項を計算できます。

int rec (int i)
{
  if(i == 1 || i == 2)
    return i;
else return rec(i-1)+rec(i-2);

}

しかし、フィボナッチを計算するために1.618である黄金数を使用したいと思います。しかし、私の試みは失敗し、間違った番号を取得します:

int rec (int i)
{
  if(i == 1 || i ==  2)
    return i;

  else return 1.618*rec(i-1);

 }

どうすれば動作させることができますか?

4

5 に答える 5

8

黄金比は無理数であるため、正確な結果を得るために、その近似値を数式に代入できるとは必ずしも期待できません。

フィボナッチ数をすばやく計算する方法を知りたい場合nは、さまざまな方法を実行時間の降順で(ただし、実装の難易度の高い順に)リストしたページをご覧ください:http://www.nayuki.io/page /fast-フィボナッチ-アルゴリズム

于 2013-02-23T22:56:14.990 に答える
2

Binetの式を参照している場合は、次のようにします。

long fib(int i) {
    double phi = // Golden Ratio
    return Math.round((Math.pow(phi, i) - Math.pow(-phi, -i)) / Math.sqrt(5));
}

上記の式は再帰的ではないことに注意してください。私はfibを計算するための再帰式を知りません。黄金比を使用したシーケンス。

于 2013-02-23T22:59:15.777 に答える
0

あなたの数学は欠陥があるように見えます、そしてあなたはあまりにも頻繁に丸めています。この式を使用しました。

これは機能します:

double gr = 1.618033988749895;
int rec (int i)
{
   return (int)round(rec2(i)/(gr+2));
}

double rec2 (int i)
{
  if (i == 1)
    return gr;

  else return gr*rec2(i-1);
}

また、実際には再帰的である必要はありません。

static int rec (int i)
{
  return (int)round(pow(gr, i)/(gr+2);
}

あまり多くの数値をチェックしませんでしたが、かなり正確なようです(Java)

于 2013-02-23T23:03:27.880 に答える
0

これはあなたがこれを行う方法です:

double gr = 1.618033988749895;
        double FibGoldenRatio(int i)
        {
            if (i == 1 )
                return 1;

            return  Math.Round(gr * FibGoldenRatio(i - 1));

        }

ここに出力の例:

1
2
3
5
8
13
21
34
55
89
144
233
377
610
987
1597
2584
4181
6765
10946
17711
28657
46368
75025
121393
196418
317811
514229
832040
1346269
2178309
3524578
5702887
9227465
14930352
24157817
39088169
63245986
102334155
165580141
267914296
433494437
701408733
1134903170
1836311903
2971215073
4807526976
7778742049
12586269025
20365011074
32951280099
53316291173
86267571272
139583862445
225851433717
365435296162
591286729879
956722026041
1548008755920
2504730781961
4052739537881
6557470319842
10610209857723
17167680177565
27777890035288
44945570212853
72723460248141
117669030460994
190392490709135
308061521170129
498454011879264
806515533049393
1.30496954492866E+15
于 2013-02-24T09:58:32.160 に答える
0

黄金比を自分で計算し、それを使用してn番目のフィボナッチ数を見つけることができます。

long long fib(int n) {
    double phi = (1 + sqrt(5))/2.0; // golden ratio
    double phi_hat = (1 - sqrt(5))/2.0; // fraction part of golden ratio

    return (pow(phi, n) - pow(phi_hat, n))/sqrt(5);
}
于 2017-12-25T10:58:58.680 に答える