Задача
Дана функция, аргументы которой – неотрицательные целые числа [latex]m[/latex] и [latex]n[/latex] [latex](m \leqslant n):[/latex]
$$f(m,n)=\begin{cases} 1, \text{ npu } m=0 \\\\ f(m-1,n-1)+f(m,n-1), \text{ npu } 0<m<n \\\\ 1, \text{ npu } m=n \end{cases}$$
Вычислить значение функции.
Входные данные
Два целых неотрицательных числа [latex]n[/latex] и [latex]m[/latex] [latex](0 \leqslant n, m \leqslant 20).[/latex]
Выходные данные
Выведите искомое значение заданной функции [latex]f(m, n).[/latex]
Тесты
# | Входные данные | Выходные данные |
---|---|---|
1 | 4 2 | 6 |
2 | 7 7 | 1 |
3 | 12 0 | 1 |
4 | 15 5 | 3003 |
5 | 10 6 | 210 |
Код программы
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
import java.util.*; import java.lang.*; import java.io.*; class Main { public static void main (String[] args) throws java.lang.Exception { int n, m, d; Scanner in = new Scanner(System.in); n = in.nextInt(); m = in.nextInt(); d = func(m, n); System.out.print(d); } public static int func (int m, int n){ if (m == 0 || m == n) return 1; else return func(m - 1, n - 1) + func(m, n - 1); } } |
Решение задачи
Для того, чтобы решить задачу, нам необходимо составить алгоритм, который будет вычислять значение заданной функции в зависимости от значения её аргументов. Для этого создадим специальную функцию func(). Строки 16 — 19 кода составляют тело функции. Программа выбирает, какую операцию ей нужно выполнить, в зависимости от определенного условия:
- Если [latex]m = 0[/latex] или [latex]m = n[/latex], то программа возвращает единицу.
- Если [latex]m < n[/latex], то программа вычисляет значение функции по формуле [latex]f(m-1,n-1)+f(m,n-1)[/latex]
Затем в главной функции вызываем нашу вспомогательную функцию func() с помощью новой переменной [latex]d[/latex] и выводим результат.
Ссылки
Ссылка на e-olymp
Ссылка на ideone
— Зачем оформлять имя функции, как математическую формулу? Нужно как код: func(). Т.е. в теге code.