Вычислить 20 членов последовательности - QBasic

Узнай цену своей работы

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

Задана рекуррентная последовательность соотношениями f(n) = f(n - 1) + b(n - 1) b(n) = f(n - 1) * b(n - 1) MOD 100 + n f(1) = b(1) = 1 Надо вычислить 20 членов f(n) (косвенная рекурсия)

Решение задачи: «Вычислить 20 членов последовательности»

textual
Листинг программы
DECLARE FUNCTION b! (n!)
DECLARE FUNCTION f! (n!)
 
CONST Count = 50
DIM SHARED arr_b (Count) AS INTEGER
DIM SHARED arr_f (Count) AS INTEGER
 
CLS
 
FOR i = 1 TO Count
   PRINT f(i)
NEXT
END
 
FUNCTION b (n)
   IF arr_b (n) > 0 THEN
      b = arr_b (n)
   ELSE
     IF n = 1 THEN
        arr_b (n) = 1
     ELSE
        arr_b (n) = f(n - 1) * b(n - 1) MOD 100 + n
     END IF
     b = arr_b (n)
   END IF
END FUNCTION
 
FUNCTION f (n)
   IF arr_f (n) > 0 THEN
      f = arr_f (n)
   ELSE
      IF n = 1 THEN
         arr_f(n) = 1
      ELSE
         arr_f (n) = f(n - 1) + b(n - 1)
      END IF
      f = arr_f (n)
   END IF
END FUNCTION

Объяснение кода листинга программы

В этом коде решается задача вычисления 20 членов последовательности с помощью функций b(n) и f(n). Список переменных и их значений:

  1. DECLARE FUNCTION b(n) - объявление функции b, которая принимает один аргумент n.
  2. DECLARE FUNCTION f(n) - объявление функции f, которая принимает один аргумент n.
  3. CONST Count = 50 - определение константы Count, которая равна 50.
  4. DIM SHARED arr_b(Count) AS INTEGER - определение массива arr_b размером Count, который будет использоваться как общий для всех функций.
  5. DIM SHARED arr_f(Count) AS INTEGER - определение массива arr_f размером Count, который будет использоваться как общий для всех функций.
  6. CLS - очистка экрана перед выводом результатов.
  7. FOR i%=1 TO Count - начало цикла, который будет выполняться от 1 до Count.
  8. PRINT f(i%) - вывод значения функции f на экран.
  9. NEXT - переход к следующей итерации цикла.
  10. END - конец цикла.
  11. FUNCTION b(n) - определение функции b.
  12. IF arr_b(n) > 0 THEN - проверка, есть ли значение в массиве arr_b.
  13. b = arr_b(n) - присваивание значения из массива arr_b переменной b.
  14. ELSE - если значение в массиве arr_b отсутствует.
  15. IF n = 1 THEN - проверка, является ли n равным 1.
  16. arr_b(n) = 1 - присваивание значения 1 массиву arr_b.
  17. ELSE - если n не равно 1.
  18. arr_b(n) = f(n-1) * b(n-1) MOD 100 + n - присваивание значения функции f, умноженного на значение функции b, массиву arr_b.
  19. END IF - закрытие блока проверки.
  20. b = arr_b(n) - присваивание значения массива arr_b переменной b.
  21. END IF - закрытие блока проверки.
  22. FUNCTION f(n) - определение функции f.
  23. IF arr_f(n) > 0 THEN - проверка, есть ли значение в массиве arr_f.
  24. f = arr_f(n) - присваивание значения из массива arr_f переменной f.
  25. ELSE - если значение в массиве arr_f отсутствует.
  26. IF n = 1 THEN - проверка, является ли n равным 1.
  27. arr_f(n) = 1 - присваивание значения 1 массиву arr_f.
  28. ELSE - если n не равно 1.
  29. arr_f(n) = f(n-1) + b(n-1) - присваивание значения функции f, плюс значение функции b, массиву arr_f.
  30. END IF - закрытие блока проверки.
  31. f = arr_f(n) - присваивание значения массива arr_f переменной f.
  32. END IF - закрытие блока проверки. В результате выполнения этого кода на экран будет выведено 20 членов последовательности, используя функции b и f.

Оцени полезность:

9   голосов , оценка 4 из 5
Похожие ответы