Вычислить "семиэтажную" дробь - QBasic

Формулировка задачи:

Дано выражение, которое надо вычислить Это только три "этажа" дроби. А всего 7. Дробь содержит 127 синусов. От sin1 до sin127 строго по-порядку подсказка маленькие дроби имеют вид: где 1 < n < 64 Программа решает эту задачу. Ответ: 2.778758 Автор просит оценить эту задачу по семибальной шкале (код, нестандартность, сложность) Вопросы Решали ли вы что-либо подобное? Есть ли рекурсивное решение? Есть ли иное решение?
REM
REM  OTBET: 2.778758
REM
 
CLS
DIM A(1 TO 127)
 
FOR i = 1 TO 127
   A(i) = SIN(i)
NEXT
 
n = 126
 
DO
   IF n >= 64 THEN
      m = n / 2
      A(m) = A(m) / (A(n) + A(n + 1))
      n = n - 2
   ELSEIF n >= 32 THEN
      m = n / 2
      A(m) = A(m) / (A(n) + A(n + 1))
      n = n - 2
   ELSEIF n >= 16 THEN
      m = n / 2
      A(m) = A(m) / (A(n) + A(n + 1))
      n = n - 2
   ELSEIF n >= 8 THEN
      m = n / 2
      A(m) = A(m) / (A(n) + A(n + 1))
      n = n - 2
   ELSEIF n >= 4 THEN
      m = n / 2
      A(m) = A(m) / (A(n) + A(n + 1))
      n = n - 2
   ELSEIF n = 2 THEN
      m = n / 2
      A(m) = A(m) / (A(n) + A(n + 1))
      n = n - 2
   END IF
LOOP UNTIL n = 0
 
PRINT A(1)
END

Код к задаче: «Вычислить "семиэтажную" дробь - QBasic»

textual
DIM i AS LONG, s(1 TO 127) AS DOUBLE
FOR i = 127 TO 1 STEP -1
    IF i > 63 THEN s(i) = SIN(i) ELSE s(i) = SIN(i) / (s(i * 2) + s(i * 2 + 1))
NEXT i
PRINT s(1)

10   голосов, оценка 4.200 из 5


СОХРАНИТЬ ССЫЛКУ