再帰関数の書き方は条件分岐を使って終了条件を定めて使うのが一般的です
でないと無限ループになってしまいます
次は書き方の一つの例に過ぎません
他にも様々な書き方ができます
再帰による累乗の計算
上記のlambda関数バージョン
再帰を使ったループの例1
でないと無限ループになってしまいます
次は書き方の一つの例に過ぎません
他にも様々な書き方ができます
( define 関数名 (if (条件判定) 戻り値 (関数名 (- 引数 1) ) )
再帰による累乗の計算
(define (fact n) (if (= n 0) 1 (* n (fact (- n 1))))) (print (fact 5)) >>120
上記のlambda関数バージョン
(define fact (lambda (n) (if (= n 0) 1 (* n (fact (- n 1)))))) (print (fact 3))再帰を使った累乗の例2
(define fact (lambda (n) (cond ((eq? n 1) 1) (else (* n (fact (- n 1)))) ) ) ) (print (fact 5))
再帰を使ったループの例1
(define (recFunc n nmax func) (if (> n nmax) n (begin (func n) (recFunc (+ n 1) nmax func) ) ) ) (recFunc 1 5 print) >>1,2,3,4,5
(define plus1 (lambda (l) (cond ((null? l) (quote ())) (else (cons (+ (car l) 1) (plus1 (cdr l))) ) ) ) ) (define l1 '(1 2 3 4 5)) (print (plus1 l1)) >'(2 3 4 5 6)
(define list-length (lambda (l) (if (null? l) 0 (+ (list-length(cdr l)) 1)) ) ) (define l1 '(1 2 3 4 5 6 7)) (print (list-length l1))
コメントをかく