タイトル説明
我々は、2使用できる横の小さな四角形1または垂直より大きな長方形を覆います。N 2の使用する大きな長方形2 * n個の重複のない小さな四角形1カバレッジ、どのように多くの方法の合計は?
問題への解決策:再帰
1 // 同様のフィボナッチ再帰 2 パブリック 静的 INT RectCover(INT ターゲット){ 3 IF(目標<= 0 ){ 4。 復帰 0 ; 5 } 他 IF(ターゲット== 1つの==ターゲット|| 2 ) { 6。 戻りターゲット; 7 } 他{ 8。 復帰 RectCover + RectCover(ターゲット-2(-target 1)); 9 } 10 }
1つの 公共 静的 INT RectCover01(INT ターゲット){ 2 であれば(目標<= 2 ){ 3 戻りターゲット。 4 } 5 のint 1 = 1 。 6 INT 2 = 2 。 7 int型の結果= 0 。 8 用(INT I = 3; I <=ターゲット; I ++ ){ 9 結果= 1 + 2。 10 1 = 2。 11 2 = 結果。 12 } 13 リターン結果。 14 }
テスト:
1 公共 静的 ボイドメイン(文字列[]引数){ 2 スキャナスキャナ= 新しいスキャナ(System.in)。 3 しばらく(scanner.hasNext()){ 4 INT ANINT = scanner.nextInt()。 5 int型のカバー= RectCover(ANINT)。 6 のSystem.out.println(カバー)。 7 } 8 } 9输入:0 1 2 3 4 5 6 7 8 9 10 10输出:0 1 2 3 5 8 13 21 34 55 89