我被卡在了我的递归中

时间:2015-01-13 16:03:55

标签: algorithm function recursion racket

我的Racket程序有问题。 我想将这个函数添加到我的程序中,但是我被卡在了我的递归中:

这里的功能:

ggt: N x N -> N
(m,n) -> 

ggT(m-n,n) if m > n

ggT(m,n-m) if n > m

m if m=n



(define (ggT m n)
  (cond
    [(> m n)(ggT (- m n)] ;; If m > n the programm should go recursiv back and change
                          ;; the value of m to m-n. But I know that this wont work this way
    [(< m n)(ggT (- n m)] ;; Same Problem here
    [else m]))

如何开始真正的递归?

2 个答案:

答案 0 :(得分:3)

试试这个:

(define (ggT m n)
  (cond [(> m n) (ggT (- m n) n)]
        [(< m n) (ggT m (- n m))]
        [else m]))

您只需在调用ggT函数时以正确的顺序传递参数,请记住ggT接收两个参数,但您只传递了一个。< / p>

答案 1 :(得分:2)

你的函数ggT有两个参数,但你只传入1个。我想你想要这样的东西:

(define (ggT m n)
  (cond
    [(> m n)(ggT (- m n) n)]                          
    [(< m n)(ggT m (- n m))]
    [else m]))