Иллюстрированный самоучитель по Mathematica 3/4

Организация циклов

Следующий пример показывает применение цикла Do для задания функции, вычисляющей п-е число Фибоначчи:

fibonacci[(n_Integer) ? Positive] :=
    Module[fnl = 1, fn2 = 0,
        Do[fnl, fn2 = fnl + fn2, fnl, n - 1]; fnl]
fibonacci[10]
55
fibonacci[100]
354224848179261915075
fibonacci[-10]
fibonacci[-10]

Обратите внимание на применение в этом примере функции Module. Она создает программный модуль с локальными переменными (в нашем случае fn1 и fn2), в котором организовано рекуррентное вычисление чисел Фибоначчи.

Наконец, последний пример показывает применение цикла Do для создания цепной дроби:

x = y;
Do[x = 1 / (1 + k x), {k, 2, 8, 2}];
x

Циклы типа For

Другой вид цикла – цикл For – реализуется одноименной функцией:

For[start, test, incr, body]

В ней сначала один раз вычисляется выражение start, а затем поочередно вычисляются выражения body и incr до тех пор, пока условие test не перестанет давать логическое значение True. Когда это случится, то есть когда test даст False, цикл заканчивается.

Следующий пример показывает создание простой программы с циклом For и результат ее выполнения:

Print["i x"]
For[x = 0; i = 0, i < 4, i++[x += 5 * i, Print[i, " ", x]]]
i x
15,
2 15
3 30
4 50
Return[x]
Return[50]

Программа, приведенная выше, позволяет наблюдать за изменением значений управляющей переменной цикла i и переменной х, получающей за каждый цикл приращение, равное 5*i. В конце документа показан пример на использование функции возврата значений Return [x]. В цикле For не предусмотрено задание локальных переменных, так что надо следить за назначением переменных – при использовании глобальных переменных неизбежны побочные эффекты.

Циклы типа While

Итак, функция For позволяет создавать циклы, которые завершаются при выполнении (эволюции) какого-либо условия. Такие циклы можно организовать и с помощью функции While [test, expr], которая выполняет expr до тех пор, пока test не перестанет давать логическое значение True.

Ниже дан практический пример организации и использования цикла While:

i := 1;
x := 1;
Print["i x"];
While[i < 5, i += 1; x += 2 * i; Print[i, " ", N[x]]]
i x
2 5.
3 11.
4 19.
5 29.
Return[x]
Return[29]

Циклы типа While, в принципе, могут заменить другие, рассмотренные выше, типы циклов. Однако это усложняет запись и понимание программ. Аппарат локальных переменных в этом типе циклов не используется.

Если Вы заметили ошибку, выделите, пожалуйста, необходимый текст и нажмите CTRL + Enter, чтобы сообщить об этом редактору.