easymath
Пример 1
Необходимо найти наибольший общий делитель (НОД) двух чисел.Для решения этой задачи воспользуемся алгоритмом Евклида. Он звучит следующим образом.
НОД( x, y ) = x если y равно 0 и
НОД( x, y ) = НОД( y, x MOD y ) если y не равно 0.
x MOD y - это получение остатка от деления.
То есть, мы находим остаток от деления двух чисел и если он не равен 0, то рассматриваем уже второе число и полученный остаток от деления и т.д.
В этом алгоритме мы видим явный пример рекурсии - вызов функции самой себя. Выглядеть эта функция будет вот так.
func uint gcd( uint first second )
{
if !second : return first
return gcd( second, first % second )
}
% - операция получения остатка от деления.
uint - тип обозначающий положительное целое число.
if - условный оператор, который в полном представлении имеет следующий вид.
if condition {
}
elif condition {
}
else {
}
Блоков elif может быть сколько угодно. Если условие выполнено, то будут исполняться следующие за условием операторы в фигурных скобках.
Сейчас осталось написать главную функцию, которая будет получать данные от пользователя и вызывать gcd. Она может содержать следующий цикл.
while 1
{
first = uint( congetstr( "Enter the first number ( enter 0 to exit ): ", input ))
if !first : break
second = uint( congetstr( "Enter the second number: ", input ))
print("GCD = \( gcd( first, second ))\n\n")
}
congetstr - функция стандартной библиотеки, которая выводит текст и получает данные от пользователя.
Пример 2
Вычислить факториал n! для n от 1 до 12. Факториал - это произведение всех чисел до данного числа включительно.Вот какая программа может быть написана в качеcтве решения.
func uint factorial( uint n )
{
if n == 1 : return 1
return n * factorial( n - 1 )
}
func main<main>
{
uint n
print("This program calculates n! ( 1 * 2 *...* n ) for n from 1 to 12\n\n")
fornum n = 1, 13
{
print("\(n)! = \(factorial( n ))\n")
}
getch()
}
Цикл fornum выполняется пока переменная-счетчик ( в нашем случае n ) меньше значения второго выражения. На каждом шаге переменная-счетчик увеличивается на 1. fornum - частный случай более общего оператора цикла for, с которым мы много раз встретимся в дальнейшем.
for counter = expression,expression,change of the value of counter
{
}
Упражнение 3
Выведите числа Фибоначчи пока очередное число не превысит 2000000000. Для вычисления используйте рекурсивную функцию. Каждое из чисел Фибоначчи равно сумме двух предыдущих.X0 = 1
X1 = 1
...
Xn = Xn-1 + Xn-2