Эта программа вычисляет две функции sin(x) и cos(x). Переменная икс задается в градусах (x - натуральное число). Программа написана в качестве примера применения косвенной рекурсии. Если кто не знает что такое косвенная рекурсия, то я поясню.
1. В обычной рекурсии функция А() вызывает сама себя
2. В косвенной рекурсии функция А() вызывает функцию Б(). А та в свою очередь вызывает функцию А(). (это простой случай)
3. В более сложном случае. Одна функция вызывает другую. Та - третью (а также может вызвать себя или вторую или первую). Смесь невообразимая.
4. Здесь две функции. И они вызывают то себя, то друг друга...
Формулы для справки:
1) sin(n) = sin(n-1)cos(1) + cos(n-1)sin(1)
2) cos(n) = cos(n-1)cos(1) - sin(n-1)sin(1)
3) sin(2n) = 2sin(n)cos(n)
4) cos(2n) = cos(n)^2 - sin(n)^2
Код:
DECLARE FUNCTION SS$ (n%)
DECLARE FUNCTION S (n%)
DECLARE FUNCTION C (n%)
DIM n AS INTEGER
DIM SHARED s1, c1
CLS
CLEAR , , 26000
INPUT "n = "; n
s1 = .017452406#
c1 = .999847695#
PRINT "sin(" + SS(n) + ")= "; S(n)
PRINT "cos(" + SS(n) + ")= "; C(n)
END
FUNCTION C (n AS INTEGER)
DIM sn, cn
IF n = 0 THEN
C = 1
ELSE
IF n MOD 2 = 0 THEN
sn = S(n \ 2)
cn = C(n \ 2)
C = cn * cn - sn * sn
ELSE
sn = S(n - 1)
cn = C(n - 1)
C = cn * c1 - sn * s1
END IF
END IF
END FUNCTION
FUNCTION S (n AS INTEGER)
DIM sn, cn
IF n = 0 THEN
S = 0
ELSE
IF n MOD 2 = 0 THEN
sn = S(n \ 2)
cn = C(n \ 2)
S = 2 * sn * cn
ELSE
sn = S(n - 1)
cn = C(n - 1)
S = sn * c1 + cn * s1
END IF
END IF
END FUNCTION
FUNCTION SS$ (n AS INTEGER)
SS = LTRIM$(STR$(n))
END FUNCTION