[コトリン・ストディ10]0716


𕼧中尉関数

  • 中位数表現を用いた関数
    通常、メンバー関数はInt.toString()として使用され、後の括弧と点の原理は中位数関数表現法
  • である.
  • は、すべての関数が使用可能ではなく、条件付きです.
    中位関数の条件
  • メンバーメソッドまたは拡張関数でなければなりません.
  • のパラメータが必要です.
  • infixキーワード定義を使用する必要があります.
  • 次に、一般表現と中位数表現を比較する例を示します.
    fum main(){
    	// 일반 표현법
        val multi = 3.multiply(10)
        // 중위 표현법
        val multi = 3 multiply 10
    }
    
    // infix 키워드 추가
    // Int를 확장해서 multiply() 함수가 하나 더 추가되었음
    infix fun Int.multiply(x: Int): Int {  // infix로 선언되므로 중위 함수
        return this * x
    }

    リロード関数の場合


  • 再帰とは
    自分自身を再参照し、
    再帰関数には、呼び出しを再開する独自の特徴があります.

  • 再帰関数の必要条件
  • 、無限呼に陥らないように条件を作った
  • スタック領域を使用するため、呼び出し回数を過度に指定して演算することはありません.
  • コードを複雑にしません.
  • 末尾再帰関数

  • スタック内でスタックを継続する方法は、関数が上書きを継続する後続形式
  • である.
  • ユニークなtaircキーワード宣言
  • を使用
    次は一般的な再帰関数の形式です.
    fun main() {
        val number = 4
        val result: Long
        
        result=factorial(number)
        println("Factorial: $number -> result")
    }
    
    tailrec fun factorial(n: Int, run: Int = 1): Long {
        return if (n == 1) n.toLong() else factorial(n, factorial(n-1)
    }
    使用後、次のように積み重ねます.
    factorial(4)
    4factorial(3)
    4(3factorial(2))
    4(3(2factorial(1))
    4X(3X(2X1)) = 24
    次にtailecを使用する例を示します.
    fun main() {
        val number = 5
        println("Factorial: $number -> ${factorial(number)}")
    }
    
    tailrec fun factorial(n: Int, run: Int = 1): Long {
        return if (n == 1) run.toLong() else factorial(n-1, run*n)
    }
  • 初回実行時にfactorial(n)を使用し、n=1の前にelse文のfactorial(n-1)を使用します.