Технический форум
Вернуться   Технический форум > Программирование > Форум программистов > Basic


Ответ
 
Опции темы Опции просмотра
Старый 30.10.2016, 11:35   #1 (permalink)
iks2
Member
 
Регистрация: 22.10.2016
Сообщений: 62
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию Смешанная рекурсия

Эта программа вычисляет две функции 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
iks2 вне форума   Ответить с цитированием

Старый 30.10.2016, 11:35
Helpmaster
Member
 
Аватар для Helpmaster
 
Регистрация: 08.03.2016
Сообщений: 0

Ранее на нашем форуме участники создавали аналогичные топики

Рекурсия
Рекурсия
рекурсия
Рекурсия
Рекурсия

Ads

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
Ответ

Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Выкл.
HTML код Выкл.
Trackbacks are Вкл.
Pingbacks are Вкл.
Refbacks are Выкл.




Часовой пояс GMT +4, время: 14:17.

Powered by vBulletin® Version 6.2.5.
Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.