フィボナッチ数列には整数nが必要です。フィボナッチ数列のn番目の項目を出力してください(0から始まり、0番目の項目は0です)。
1.再帰的方法の時間の複雑さ:O(2 ^ n)
public class Solution { public int Fibonacci(int n){ if(n == 0)return 0 ; if(n == 1)は1を返します。 フィボナッチ(n-1)+フィボナッチ(n-2 )を返す; } }
2.再帰時間の複雑さ:O (n )
再帰は、同じデータを大量に繰り返し計算します。最新の2つの数値が毎回使用されるため、最新の2つの数値のみを保存できます。
public class Solution { public int Fibonacci(int n){ if(n == 0)return 0 ; if(n == 1)は1を返します。 int a = 0、b = 1、c = 1 ; while(n-!= 1 ){// for也行 c = a + b; a = b; b = c; } return c; } }
ステップジャンプ:カエルは一度に1ステップ、または2ステップまでジャンプできます。カエルがnレベルのステップでジャンプするジャンプの種類を確認する(異なる結果を計算する順序は異なる)
1.再帰
public class Solution { public int JumpFloor(int n){ if(n == 1)return 1 ; if(n == 2)return 2 ; リターン JumpFloor(N-1)+ JumpFloor(N-2 )。 } }
2.再帰
public class Solution { public int JumpFloor(int n){ if(n == 1)return 1 ; if(n == 2)return 2 ; int a = 1、b = 2 ; for(int i = 3; i <= n; i ++ ){ b = a + b; a = b- a; } return b; } }
変なジャンプのステップ:カエルは一度に1ステップ、または2ステップをジャンプできます... nステップにジャンプすることもできます。nレベルのステップにジャンプする方法をカエルに尋ねます。
分析:再帰的な式を見つけます。f(1)= 1 f(2)= 2 f(3)= 4 f(4)= 8 ............. f(n)= f (n-1)* 2
public class Solution { public int JumpFloorII(int n){ if(n == 1)return 1 ; int r = 1 ; for(int i = 2; i <= n; i ++ ) r = r * 2 ; rを返す; } }
public class Solution { public int RectCover(int n){ if(n <= 2)return n; int one = 1、two = 2 ; for(int i = 3; i <= n; i ++ ) { two = one + two; one = two- one; } 2つ返します。 } }
概要:このタイプの問題の鍵は、再帰的な式を見つけることです!