2017-11-13 4 views
1

私は基数と指数nを取るラケットで "遅い"指数関数を作成しようとしています。私はこの関数を作成して、それ自身でベースを掛けることで答えを得ることができます。私は、リストの作成は私の答えを得るための最良の方法だと思いますが、私はいくつかの問題に実行しているよ:与えられた基底と指数のパラメータ、自分自身のexpt関数を作成したい

(define (slow-expt base n) 
    (local [(define listn (make-list n base))] 
    (cons (* (- base 1) (first listn)) 
      (slow-expt base (rest listn))))) 

私のエラーは*が2番目の引数は数であることを想定しているが、それは与えられるべきである(最初のリスト)。アドバイスの言葉?

+0

引数 'N'は、いくつかの整数であることを期待、しかし、あなたの再帰呼び出しは、その位置にリストを渡しています。したがって、2度目の '(make-list n base)'が評価されると、 'n'がリストになるのでエラーを投げます。また、すべての再帰関数は基底ケースを必要とします。基本ケースは、反復処理の対象によって異なります。 – assefamaru

答えて

0

リストは、この問題とは何の関係もない、単にそれ自体でbaseを掛け、n回:

(define (slow-expt base n) 
    (if (= n 0) 
     1 
     (* base (slow-expt base (- n 1))))) 
関連する問題