再帰とループ(フィボナッチシーケンス、ジャンプ手順、倒錯したジャンプ手順、長方形のカバー)

フィボナッチ数列には整数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 ;
        forint 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 ;
        forint 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 ;
     forint i = 3; i <= n; i ++ 
     { 
         two = one + two; 
         one = two- one; 
     } 
        2つ返します。

    } 
}

概要:このタイプの問題の鍵は、再帰的な式を見つけることです!

 

おすすめ

転載: www.cnblogs.com/xuechengmeigui/p/12695424.html
おすすめ