pythonコード多重化と関数再帰

7272 ワード

コード多重化とモジュール化設計
コード多重化
  • コードリソース化:プログラムコードは計算を表す「リソース」
  • である.
  • コード抽象化:関数などの方法を用いてコードにより高いレベルの定義
  • を与える.
    モジュラ設計
  • は、関数またはオブジェクトでカプセル化することにより、プログラムをモジュールとモジュールとの間の表現
  • に分割する.
  • は、具体的には、メインプログラム、サブプログラム、サブプログラム間の関係
  • を含む.
  • 分而治之の思想はモジュール化設計の核心であり、分而治之、階層抽象、体系化設計の思想
  • である.
    ファスナー
  • 締結:2つの部分の間に多くの交流があり、
  • は独立して存在できない.
  • 松結合:2つの部分間の交流は少なく、
  • が独立して存在することができる.
  • モジュール(関数)内部、密結合、モジュール(関数)間、松結合
  • 関数再帰の理解
    関数定義で関数自体を呼び出す方法を関数再帰と呼ぶ.
    再帰思想は数学の帰納法がプログラミングの中で与えた体現である.
    再帰的な2つの重要な特徴
  • チェーン:計算中に再帰チェーンが存在し、
  • ベース:再帰を必要としない1つまたは複数のベースが存在する
  • 再帰チェーンと再帰ベースプログラムを見つけることは、具体的な再帰プロセス
  • まで書く必要はありません.
    関数再帰呼び出しプロシージャ
    再帰的な実装には、関数と分岐文が必要です.
    再帰的な理解に対して
  • 再帰自体が関数であり、分岐文からなる
  • 例、階乗の計算
    def fact(n):
        if n==0:
            return 1
        else:
            return n*fact(n-1)
    

    インスタンス解析
    文字列反転出力
    def rvs(s):
        if s =="":
            return s;
        else:
            return rvs(s[1:])+s[0]
    
    print(rvs("hello"))
    

    フィボナッチ数列
    def fibo(n):
        if n==0:
            return 0
        if n==1 or n==2:
            return 1
        else:
            return fibo(n-1)+fibo(n-2)
    print(fibo(20))
    

    ハノータ問題
    count=0
    def hanoi(n,src,mid,dst):
        global count
        if n==1:
            print("{}:{}->{}".format(n,src,dst))
            count+=1
        else:
            hanoi(n-1,src,mid,dst)
            print("{}:{}->{}".format(n, src, dst))
            count += 1
            hanoi(n - 1, mid, dst,src)
    hanoi(3,'A','B','C')
    print(count)