Saya mencoba mendefinisikan prosedur rekursif yang disebut (NDIVIDE X Y N) dengan tiga parameter X, Y, dan N. Ini mengembalikan hasil X dibagi dengan Y n kali. Saya memiliki fungsi yang membagi (mendefinisikan (membagi x y) (/ x y)). Sekarang saya mencoba menggunakan fungsi belah ke ndivide dan saya tidak bisa membuatnya bekerja

0
Maheer Patel 5 April 2021, 05:55

2 jawaban

Jawaban Terbaik

Implementasi rekursif (meskipun mengapa ada orang yang melakukan ini):

(define (nDivide x y n)
  (if (= n 0)
      x
      (Divide (nDivide x y (- n 1)) y)))

Berikut ini adalah implementasi berulang dari NDIVide, yang lebih mudah:

(define (nDivide x y n) 
  (if (= n 0)
      x
     (nDivide (Divide x y) y (- n 1))))

(define (Divide x y) (/ x y))

Contoh:

(nDivide 10000 3 4)
;Value: 10000/81
0
tf3 5 April 2021, 04:16

Pada dasarnya ada dua cara untuk melakukan sesuatu n kali:

  • Lakukan sekali, lalu lakukan n - 1 kali;
  • Lakukan n - 1 kali, lalu lakukan sekali.

Anda mendapatkan prosedur yang berbeda tergantung pada jalur mana yang Anda pilih:

; divide, then recurse
(define (nDivide x y n)
    (if (zero? n)
            x
        (nDivide (Divide x y) y (- n 1))))

; recurse, then divide
(define (nDivide x y n)
    (if (zero? n)
            x
        (Divide (nDivide x y (- n 1)) y)))
1
molbdnilo 5 April 2021, 10:33