Практикум по курсу "Алгоритмизация и программирование". Часть 2. Андрианова А.А - 49 стр.

UptoLike

. Практикум по курсу «Алгоритмизация и программирование». Часть 2
// функции
// попытка перейти в ячейку, расположенную справа
if(f==0 && a[x][y+1]==0 && !(x==xprev && y+1==yprev))
f=Labirint(a,m,n,x,y+1,x,y); // рекурсивный вызов
// функции
// попытка перейти в ячейку, расположенную сверху
if(f==0 && a[x-1][y]==0 && !(x-1==xprev && y==yprev))
f=Labirint(a,m,n,x-1,y,x,y); // рекурсивный вызов
// функции
// попытка перейти в ячейку, расположенную слева
if(f==0 && a[x][y-1]==0 && !(x==xprev && y-1==yprev))
f=Labirint(a,m,n,x,y-1,x,y); // рекурсивный вызов
// функции
// возврат в предыдущую ячейку
a[x][y]=0;
return f;
}
Домашнее задание
1. Написать рекурсивную функцию вычисления n!! = n*(n-2)*(n-4)… . По-
следний сомножитель в произведении равен 2, если n четное число, 1 в
противном случае.
2. Написать рекурсивную функцию вычисления числа комбинаций из n
по k (C(n, k)) с помощью следующих рекуррентных соотношений:
C(N, 0) = C(N,N) = 1,
C(N,K) = C(N - 1,K) + C(N - 1, K - 1), где 0 < K < N.
3. Написать рекурсивную функцию вычисления наибольшего общего де-
лителя двух положительных целых чисел m и n (m > n).
НОД (m, n) = НОД (n, m%n), если n ≠ 0; НОД (m, 0) = n.
4. Написать рекурсивную функцию вычисления суммы цифр из записи
целого положительного числа, не используя операторов цикла.
49
            .         Практикум по курсу «Алгоритмизация и программирование». Часть 2
                                                       // функции

          // попытка перейти в ячейку, расположенную справа
          if(f==0 && a[x][y+1]==0 && !(x==xprev && y+1==yprev))
               f=Labirint(a,m,n,x,y+1,x,y); // рекурсивный вызов
                                            // функции

          // попытка перейти в ячейку, расположенную сверху
          if(f==0 && a[x-1][y]==0 && !(x-1==xprev && y==yprev))
               f=Labirint(a,m,n,x-1,y,x,y); // рекурсивный вызов
                                            // функции

          // попытка перейти в ячейку, расположенную слева
          if(f==0 && a[x][y-1]==0 && !(x==xprev && y-1==yprev))
               f=Labirint(a,m,n,x,y-1,x,y); // рекурсивный вызов
                                            // функции
          // возврат в предыдущую ячейку
          a[x][y]=0;
          return f;
   }


                                                        Домашнее задание

    1. Написать рекурсивную функцию вычисления n!! = n*(n-2)*(n-4)… . По-
следний сомножитель в произведении равен 2, если n – четное число, 1 – в
противном случае.

    2. Написать рекурсивную функцию вычисления числа комбинаций из n
по k (C(n, k)) с помощью следующих рекуррентных соотношений:

                               C(N, 0) = C(N,N) = 1,
                C(N,K) = C(N - 1,K) + C(N - 1, K - 1), где 0 < K < N.

    3. Написать рекурсивную функцию вычисления наибольшего общего де-
лителя двух положительных целых чисел m и n (m > n).

            НОД (m, n) = НОД (n, m%n), если n ≠ 0; НОД (m, 0) = n.
    4. Написать рекурсивную функцию вычисления суммы цифр из записи
целого положительного числа, не используя операторов цикла.


                                        49