多层嵌套的循环怎么转成递归&&尾递归?
lisp吧
全部回复
仅看楼主
level 1
uternet 楼主
我刚知道 Scheme 里有 循环,汗。。。
于是我用do 写了这一小段代码,算的是百钱买百鸡。
在我知道 do 之前,我没办法把这程序写出来,因为我不知道用递归要怎么写。求指点
(憋屈)
2014年06月15日 08点06分 1
level 1
uternet 楼主
每次循环出口得干点什么,我不知道要干什么,于是 'Done
if 语句得有个 else,我不知道要用 else干什么,于是 'finding...
2014年06月15日 08点06分 2
level 10
(letrec ((iter
----------(lambda (x y z)
------------(cond ((> z 20)
-------------------(iter x (+ y 1) 0))
------------------((> y 33)
-------------------(iter (+ x 3) 0 0))
------------------((> x 99) 'done)
------------------((and (= (+ (/ x 3)
------------------------------(* y 3)
------------------------------(* z 5))
---------------------------100)
------------------------(= (+ x y z) 100))
-------------------(display (list z y x))
-------------------(newline))
------------------(else (iter x y (+ z 1)))))))
--(iter 0 0 0))
2014年06月16日 05点06分 4
找到一组答案后无法继续递归,完整的答案有4组。
2014年06月17日 02点06分
回复 uternet :那在(newline)后面加多句(iter x y (+ z 1))
2014年06月17日 02点06分
回复 ljqican :搞成了,谢谢帮助![滑稽]
2014年06月17日 02点06分
回复 uternet :[乖]看懂了下次会自己写就好
2014年06月17日 02点06分
level 10
看看漂亮的缩进
(letrec ((iter
     (lambda (x y z)
      (cond ((> z 20)
          (iter x (+ y 1) 0))
         ((> y 33)
          (iter (+ x 3) 0 0))
         ((> x 99) 'done)
         ((and (= (+ (/ x 3)
               (* y 3)
               (* z 5))
              100)
            (= (+ x y z) 100))
          (display (list z y x))
          (newline))
         (else (iter x y (+ z 1)))))))
 (iter 0 0 0))
2014年06月27日 03点06分 8
level 4
路过
2014年06月30日 06点06分 9
1