再帰アルゴリズムの簡単なアプリケーション

無限ループが発生しない再帰関数を確保するためには、以下の属性を持っている必要があります。

  • シンプルな基本案例(basic case)(あるいは場合によっては) -プログラムを終了する答えを生成するために、再帰を使用することはできません。
  • 呼ばれるルールのセットは递推关系(recurrence relation)、他のすべての場合において、ベースケースに分けることができます。

1、逆の順序で印刷文字列

/ ** 
   输入:[ "H"、 "E"、 "L"、 "L"、 "O"] 
   输出:[ "O"、 "L"、 "L"、 "E"、 "H"] 
 * / 
パブリッククラスPrintReverseDemo { 

    パブリック静的無効メイン(文字列[] args){ 
        printReverse( "APPLE" .toCharArray())。
    } 

    プライベート静的ボイドprintReverse(CHAR [] STR){ 
        ヘルパー(0、STR)。
    } 

    プライベート静的ボイドヘルパー(int型のインデックスは、char型[] STR){ 

        IF(ヌル== STR ||インデックス> = str.length){ 
            返します。
        } 
        ヘルパー(インデックス+ 1、STR)。
        System.out.print(STR [インデックス])。
    } 
}

 

リスト内の2つのスイッチングノード間の2、

/ ** 
 *给定1-> 2->> 4 3-、你应该返回2-> 1-> 4 - > 3。
 * / 
publicクラスSwapNodeDemo { 

    パブリック静的無効メイン(文字列[] args){ 

        ListNodeヘッド= makeListNode()。

        System.out.println(ヘッド)
        System.out.println(swapPairs2(ヘッド))。
} 


    / ** 
     *递归
     * @paramヘッド
     * @return 
     * / 
    パブリック静的ListNodeのswapPairs(ListNodeヘッド){ 
        IF(ヘッド== NULL || head.next == NULL){ 
            戻りヘッド。
        } 
        
        ListNode P = head.next。
        head.next = swapPairs(head.next.next)。
        p.next =ヘッド。
        Pを返します。
    }

    / ** 
     *非递归
     * @paramヘッド
     * @return 
     * / 
    パブリック静的ListNode swapPairs2(ListNodeヘッド){ 
        ListNodeダミー=新しいListNode(-1)。
        dummy.next =ヘッド。
        ListNode CURR =ダミー; 
        一方、(!curr.next = NULL && curr.next.next = NULL){ 
            ListNode最初= curr.next。
            ListNode第= curr.next.next。

            //スワップ二つのノード
            first.next = second.next。
            second.next =最初; 
            curr.next =秒; 

            //次の反復への更新
            CURR = curr.next.next。
        }
        dummy.next返します。
    } 

    パブリック静的ListNode makeListNode(){ 
        ListNode 1 =新しいListNode(1)。
        ListNode 2 =新しいListNode(2)。
        ListNode 3 =新しいListNode(3)。
        ListNode 4 =新しいListNode(4)。

        one.next = 2; 
        two.next = 3; 
        three.next = 4; 

        1を返します。
    }

 

3、パスカルの三角形

非負の整数を考えると  numRowsの数、のパスカルの三角形前に生成  numRowsの数の ライン。パスカルの三角形では、各番号は、その左上と右上の数です。

 

公衆リスト<リスト>生成する(INT numRowsの数){ 
        リスト<リスト>結果=新規のArrayList <>(); 
        IF(numRowsの数<= 0){ 
            リターン結果。
        } 

        ため(INT I = 1; I <= numRowsの数、iは++){ 
            リストinnerList =新規のArrayList <>(); 
            (INT J = 1; J <= I; J ++){ため
                innerList.add(F(I、J)); 
            } 
            result.add(innerList)。
        } 
        戻り値の結果; 
    } 

    公共のint F(整数I、整数j){ 
        {(J == 1 || iがjは==)場合に
            1を返します。
        }他{ 
            戻りF(I-1、J-1)+ F(I-1、J)。
        } 
    }

 

おすすめ

転載: www.cnblogs.com/kaleidoscope/p/11407032.html