éå½ç主è¦æ¹æ³æ¯ä»ä¹ï¼
ä¸ãéå½ç®æ³
éå½ç®æ³ï¼è±è¯ï¼recursion algorithmï¼å¨è®¡ç®æºç§å¦ä¸æ¯æä¸ç§éè¿éå¤å°é®é¢å解为åç±»çåé®é¢è解å³é®é¢çæ¹æ³ãéå½å¼æ¹æ³å¯ä»¥è¢«ç¨äºè§£å³å¾å¤ç计ç®æºç§å¦é®é¢ï¼å æ¤å®æ¯è®¡ç®æºç§å¦ä¸ååéè¦çä¸ä¸ªæ¦å¿µãç»å¤§å¤æ°ç¼ç¨è¯è¨æ¯æå½æ°çèªè°ç¨ï¼å¨è¿äºè¯è¨ä¸å½æ°å¯ä»¥éè¿è°ç¨èªèº«æ¥è¿è¡éå½ã计ç®ç论å¯ä»¥è¯æéå½çä½ç¨å¯ä»¥å®å
¨å代循ç¯ï¼å æ¤å¨å¾å¤å½æ°ç¼ç¨è¯è¨ï¼å¦Schemeï¼ä¸ä¹ æ¯ç¨éå½æ¥å®ç°å¾ªç¯ã
äºãéå½ç¨åº
å¨æ¯æèªè°çç¼ç¨è¯è¨ä¸ï¼éå½å¯ä»¥éè¿ç®åçå½æ°è°ç¨æ¥å®æï¼å¦è®¡ç®é¶ä¹çç¨åºå¨æ°å¦ä¸å¯ä»¥å®ä¹ä¸ºï¼
è¿ä¸ç¨åºå¨Schemeè¯è¨ä¸å¯ä»¥åä½ï¼
1
(define (factorial n) (if (= n 0) 1 (* n (factorial (- n 1)))))
ä¸å¨ç¹ç»åå
å³ä½¿ä¸ä¸ªç¼ç¨è¯è¨ä¸æ¯æèªè°ç¨ï¼å¦æå¨è¿è¯è¨ä¸å½æ°æ¯ç¬¬ä¸ç±»å¯¹è±¡ï¼å³å¯ä»¥å¨è¿è¡æå建并ä½ä¸ºåéå¤çï¼ï¼éå½å¯ä»¥éè¿ä¸å¨ç¹ç»ååï¼è±è¯ï¼Fixed-point combinatorï¼æ¥äº§çã以ä¸Schemeç¨åºæ²¡æç¨å°èªè°ç¨ï¼ä½æ¯å©ç¨äºä¸ä¸ªå«åZ ç®åï¼è±è¯ï¼Z combinatorï¼çä¸å¨ç¹ç»ååï¼å æ¤åæ ·è½è¾¾å°éå½çç®çã
1
(define Z (lambda (f) ((lambda (recur) (f (lambda arg (apply (recur recur) arg)))) (lambda (recur) (f (lambda arg (apply (recur recur) arg)))))))(define fact (Z (lambda (f) (lambda (n) (if (<= n 0) 1 (* n (f (- n 1))))))))
è¿ä¸ç¨åºæè·¯æ¯ï¼æ¢ç¶å¨è¿éå½æ°ä¸è½è°ç¨å
¶èªèº«ï¼æ们å¯ä»¥ç¨ Z ç»åååºç¨(application)è¿ä¸ªå½æ°åå¾å°çå½æ°ååºç¨é计ç®çåæ°ã
å°¾é¨éå½
å°¾é¨éå½æ¯æéå½å½æ°å¨è°ç¨èªèº«åç´æ¥ä¼ åå
¶å¼ï¼èä¸å¯¹å
¶åå è¿ç®ãå°¾é¨éå½ä¸å¾ªç¯æ¯çä»·çï¼èä¸å¨ä¸äºè¯è¨ï¼å¦Schemeä¸ï¼å¯ä»¥è¢«ä¼å为循ç¯æ令ã å æ¤ï¼å¨è¿äºè¯è¨ä¸å°¾é¨éå½ä¸ä¼å ç¨è°ç¨å æ 空é´ã以ä¸Schemeç¨åºåæ ·è®¡ç®ä¸ä¸ªæ°åçé¶ä¹ï¼ä½æ¯ä½¿ç¨å°¾é¨éå½ï¼
1
(define (factorial n) (define (iter product counter) (if (> counter n) product (iter (* counter product) (+ counter 1)))) (iter 1 1))
ä¸ãè½å¤è§£å³çé®é¢
æ°æ®çå®ä¹æ¯æéå½å®ä¹çãå¦Fibonacciå½æ°ã
é®é¢è§£æ³æéå½ç®æ³å®ç°ãå¦Hanoié®é¢ã
æ°æ®çç»æå½¢å¼æ¯æéå½å®ä¹çãå¦äºåæ ã广ä¹è¡¨çã
åãéå½æ°æ®
æ°æ®ç±»åå¯ä»¥éè¿éå½æ¥è¿è¡å®ä¹ï¼æ¯å¦ä¸ä¸ªç®åçéå½å®ä¹ä¸ºèªç¶æ°çå®ä¹ï¼âä¸ä¸ªèªç¶æ°æçäº0ï¼æçäºå¦ä¸ä¸ªèªç¶æ°å ä¸1âãHaskellä¸å¯ä»¥å®ä¹é¾è¡¨ä¸ºï¼
1
data ListOfStrings = EmptyList | Cons String ListOfStrings
è¿ä¸å®ä¹ç¸å½äºå®£åâä¸ä¸ªé¾è¡¨ææ¯ç©ºä¸²åï¼ææ¯ä¸ä¸ªé¾è¡¨ä¹åå ä¸ä¸ä¸ªå符串âãå¯ä»¥çåºææé¾è¡¨é½å¯ä»¥éè¿è¿ä¸éå½å®ä¹æ¥è¾¾å°ã
温馨提示:答案为网友推荐,仅供参考