Организация циклов
Следующий пример показывает применение цикла 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, в принципе, могут заменить другие, рассмотренные выше, типы циклов. Однако это усложняет запись и понимание программ. Аппарат локальных переменных в этом типе циклов не используется.