• Добро пожаловать на компьютерный форум Tehnari.ru. Здесь разбираемся с проблемами ПК и ноутбуков: Windows, драйверы, «железо», сборка и апгрейд, софт и безопасность. Форум работает много лет, сейчас он переехал на новый движок, но старые темы и аккаунты мы постарались сохранить максимально аккуратно.

    Форум не связан с магазинами и сервисами – мы ничего не продаём и не даём «рекламу под видом совета». Отвечают обычные участники и модераторы, которые следят за порядком и качеством подсказок.

    Если вы у нас впервые, загляните на страницу о форуме и правила – там коротко описано, как задать вопрос так, чтобы быстро получить ответ. Чтобы создавать темы и писать сообщения, сначала зарегистрируйтесь, а затем войдите под своим логином.

    Не знаете, с чего начать? Создайте тему с описанием проблемы – подскажем и при необходимости перенесём её в подходящий раздел.
    Задать вопрос Новые сообщения Как правильно спросить
    Если пришли по старой ссылке со старого Tehnari.ru – вы на нужном месте, просто продолжайте обсуждение.

Смешанная рекурсия

  • Автор темы Автор темы iks2
  • Дата начала Дата начала

iks2

Новые
Регистрация
22 Окт 2016
Сообщения
62
Реакции
0
Баллы
0
Смешанная рекурсия

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