方案递归和更新条件

时间:2016-11-06 20:09:32

标签: recursion scheme

我无法使用对数字进行平方的递归函数。 基本上我正在尝试编写一个函数,一直调用Add函数x次数来平方。所以如果它是7则应该调用它七次以获得49.

(define (Add a b)
  (if (and (number? a) (number? b))
      (+ a b)
      (lambda (x)
        (+ (a x) (b x)))))

(define i 0)
(define ans 0)

(define (Square a)
  (when (> i a)
     ((Add a ans) (+ i 1 ))))

我遇到的主要问题是square函数只经过一次循环,我不知道为什么条件不会更新/继续循环直到达到那个条件。

2 个答案:

答案 0 :(得分:1)

直接写square是一件很痛苦的事。编写递归multiply函数然后只需要使用方函数调用multiply就容易多了。按照设计方法对自然数进行递归,如9.3 of HtDP部分所示。

顺便说一句,如果你还没有在更标准的自引用数据定义(例如列表)上编写一堆递归函数,那么,我声称你的导师做错了。

答案 1 :(得分:0)

您应该制作更改参数的所有内容。想象一下,你想让(define (factorial value) (define (helper cur ans) (if (zero? cur) ans ; finished. return the answer (helper (- cur 1) ; recur by updating n (* cur ans)))) ; and update the answer (helper value 1)) 然后两个值发生变化。它的结果和数字的迭代下降到零。

scan f_s("%d", &list[1]);

list[1] + 3;

再次。它的完全与评论中的示例相同,只是它在每一步都做了其他事情。基本构建块是相同的,并且可以使参数平方的东西非常相似。