第二に、フィボナッチ数
タイトル説明
我々は、すべての項目のn番目のフィボナッチ数フィボナッチ数列(0から、最初の0は0である)あなたが出力、今フィボナッチ数、および整数を入力するように求めていることを知っているのn。N <= 39
1.再帰
数1)分析フィボナッチ標準式は、F(1)= 1、F(2)= 1、F(N)= F(N-1)+(N F(N-2)> = 3、式に従ってn∈N*)を直接書くことができます。
2)コード
パブリック クラスソリューション{ 公共 のintフィボナッチ(INT N){ 場合(N <= 1 ){ リターンN。 } 戻りフィボナッチ(N-1)+フィボナッチ(N-2 )。 } }
3)複合
時間の複雑さ:O(2 ^ n)の
宇宙複雑:O(1)
2.再帰最適化
1)分析
再帰的計算は、同じデータの多くを繰り返して、我々は、最大8結果を格納する配列を使用します!
2)コード
パブリック クラス溶液{ 公共 のintフィボナッチ(int型N){ int型年[] = 新しい INT [40 ]。 年間[ 0] = 0 ; 年[ 1] = 1 。 用(int型、iが<= N; I = 2 iが++ ){ 年[I] =年間[I-1] +年[I-2 ]。 } 戻り[n]の年; } }
3)複雑さ:
時間複雑:O(n)は、
時間複雑:O(n)は、
3.記憶域の最適化
1)分析
実際には、我々は、最新の2つの番号を使用する時間を見つけることができますので、我々は唯一の最後の二つの数字、n個のアイテムの格納された値の総和、一つの記憶項目の最初のn-1値は、N-2の二つの記憶を保存することができますアイテムの値。
2)コード
パブリック クラスソリューション{ 公共 のintフィボナッチ(INT N){ 場合(N == 0 ){ 戻り 0 ; } そう であれば(N == 1 ){ リターン 1 。 } int型の和= 0 。 int型 2 = 0を。 int型 1 = 1 ; 以下のために(int型、I 2 = I ++が; iが<= N ){ 合計 = 2 + 1。 2 = 1; 1 = 合計。 } 戻り値の和。 } }
3)複雑さ:
時間複雑:O(n)は、
時間の複雑さ:O(1)
4.連続最適化
1)分析
プレート上に見られる観察は、n個のアイテムの合計のみが一度に各計算は、実際には、また、例えば、N-1のストレージアイテムの合計を使用することができ、エンドFを計算する際に(5)の和が保存されてF(5)の値は、ときにFを計算する必要があります(6)において、f(6)= F(5) - F(4)、(5)和F(4)のいずれかに格納されたfがfで、記憶されている(5)-f (3)図は、得られました:
2)コード
public class Solution { public int Fibonacci(int n) { if(n == 0){ return 0; }else if(n == 1){ return 1; } int sum = 1; int one = 0; for(int i=2;i<=n;i++){ sum = sum + one; one = sum - one; } return sum; } }
3). 复杂度
时间复杂度:O(n)
时间复杂度:O(1)