Рекурсивная
обработка числовой информации.
Задание 1: Подсчитать сумму
квадратов целых чисел в заданном интервале значений от M до
N включительно.
(defun SumSqr (m n)
(cond ((eq n m) (* m m))
((> m n) (+ (* m m) (SumSqr n (- m 1))))
(T (+ (* n n) (SumSqr m (- n 1))))
)
)
-----------------------------------------------------------------
Задания 2-3: Определить
НОД и НОК двух чисел.
(defun RunNod (n m)
(cond ((= n m) n)
((< n m) (RunNod n (- m n)))
(T (RunNod m (- n m)))
)
)
(defun NOD (n m)
(cond ((not (numberp n)) 'n:non-number)
((not (numberp m)) 'm:non-number)
((< n 0) 'n:non-positive)
((< m 0) 'm:non-positive)
(T (RunNod n m))
)
)
(defun RunNok (n m)
(/ (* n m) (Nod n m))
)
(defun NOK ( n m )
(cond ((not (numberp n)) 'n:non-number)
((not (numberp m)) 'm:non-number)
((< n 0) 'n:non-positive)
((< m 0) 'm:non-positive)
(T (RunNOK n m))
)
)
(rds)
----------------------------------------------------------------
Задание 4: Вычислить квадратный
корень из заданного числа.
(defun RunSqrt (l r n temp)
(( setq temp (* (/ (+ l r) 2) (/ (+ l r) 2) ))
(cond ( (< (abs (- temp n)) 0.00001) (/ (+ l r) 2))
( (< temp n ) (RunSqrt (/ (+ l r) 2) r n ))
(T (RunSqrt l (/ (+ l r) 2) n))
)
)
)
(defun SQRT (n)
(cond ((NOT (Numberp n)) 'non-number)
((>= n 0) (RunSqrt 0 n n ))
(T 'Negative!!)
)
)
(RDS)
-------------------------------------------------------------------
Задание 5: Первые два члена
ряда Фибоначчи равны 1 и 2. Каждый следующий член равен сумме
двух предыдущих. Определить функцию, вычисляющую N-й член
ряда Фибоначчи.
(defun RunFibo (N prev)
(cond ((eq n 1) (cons 1 0))
((eq n 2) (cons 2 1))
(T (setq prev (RunFibo (- N 1)))
( cons ( + (car prev) (cdr prev)) (car prev))
)
)
)
(defun Fibo (N)
(cond ((not (numberp n)) 'non-number!!)
((<= n 0) 'non-positive!!)
(T (car (RunFibo N)))
)
)
(rds)
©Bear
Labs, Inc. 2001, All Rights Reserved.
|