この質問の一部を手伝っていただければ幸いです。ありがとう。
2^0 = 1
2^N = 2^(N-1) + 2^(N-1)
この定義を、2 の累乗と呼ばれるまったく同等のツリー再帰関数に変換します。その漸近的な時間計算量を説明し、なぜこの時間計算量を持つのかを説明してください。
ここで、まったく同じことを計算する tttpo_rec という関数を作成しますが、O(n) 時間の複雑さを持ち、保留中の操作に O(n) スペースを使用する線形再帰プロセスを使用します。
ここで、まったく同じことを計算する tttpo_iter という関数を作成しますが、O(n) 時間の複雑さを持ち、一定のスペースを使用する線形反復プロセスを使用します。
ここで、2^N、3^N などを計算できるように、前述の定義の 1 つを一般化して、任意の整数乗を処理できるようにしたいとします。2 つの引数を取る to-the-power-of という関数を作成します。そして、一方を他方の力に上げます。
テンプレートは次のとおりです。
;; to-the-power-of: integer integer -> integer
;; This function raises m to the power of n, returning the result.
;; m must be > 0 and n >= 0.
(define (to-the-power-of m n)
...)
(check-expect (to-the-power-of 1 0) 1) ; base case
(check-expect (to-the-power-of 2 3) 8) ; recursive case
(check-expect (to-the-power-of 3 2) 9) ; recursive case
もう 1 つ制限を追加します。* 演算子は使用できません。乗算を行うには、次の再帰関数のみを使用できます。
;;; multiply: integer integer -> integer
;; This function multiplies two non-negative integers, returning the result.
;; Its time complexity is O(a).
(define (multiply a b)
...)
関数を書き、その時間計算量とその理由を説明します。