Skip to main content

Задание 16

В этом задании задана рекуррентная функция, проще всего написать её на удобном вам языке программирования, тогда ответ на задачу вычисляется довольно несложно.

Также может быть приведён код, о котором необхоимо сказать, как он работает. Я приведу его на трёх самых популярных языках,

Пример 1

tip

Алгоритм вычисления функции F(n) задан следующими соотношениями:

F(n) = 1 при n = 1

F(n) = n + 2 + F(n–1), если n чётно,

F(n) = 2* F(n–2), если n нечётно.

Чему равно значение функции F(24)? Для выполнения задания можно также написать программу или воспользоваться редактором электронных таблиц.

public class Example1 {
// функция
static int F(int n) {
if (n == 1)
return 1;
if (n % 2 == 0)
return n + 2 + F(n - 1);
return 2 * F(n - 2);
}

public static void main(String[] args) {
// выводим F(24)
System.out.println(F(24));
}
}

Вывод программы:

2074

Ответ: 2074

Пример 2

Задача

Определите, сколько символов * выведет эта процедура при вызове F(22):

void F( int n )
{
System.out.print('*');
if( n >= 1 ) {
System.out.print('*');
F(n-1);
F(n-2);
F(n-3);
}
}

Для выполнения задания можно также написать программу или воспользоваться редактором электронных таблиц.

Чтобы посчитать, сколько звёздочек будет выведено, проще всего заменить их вывод на увеличение глобальной переменнойи после вызова функции просто вывести его количество

public class Example2 {
// кол-во звёздочек
static int cnt = 0;

// функция
static void F( int n )
{
cnt++;
if( n >= 1 ) {
cnt++;
F(n-1);
F(n-2);
F(n-3);
}
}

public static void main(String[] args) {
// запускае F(22)
F(22);
// выводим кол-во звёздочек
System.out.println(cnt);
}
}

Вывод программы:

1957585

Ответ: 1957585

Задания для самостоятельного выполнения