Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
m9co038
1 / 1 / 0
Регистрация: 27.11.2010
Сообщений: 34
#1

Рекурсия: нахождение числа сочетаний из N элементов по K - C++

15.05.2011, 17:40. Просмотров 576. Ответов 1
Метки нет (Все метки)

Выручайте! Очень нада сдать, сам не знаю как сделать.
Описать рекурсивную функцию Combin2(N, K) целого типа, находящую C(N, K) — число сочетаний из N элементов по K — с помощью рекуррентного соотношения:
C(N, 0) = C(N, N) = 1,
C(N, K) = C(N – 1, K) + C(N – 1, K – 1) при 0 < K < N.
Параметры функции — целые числа; N > 0, 0 ≤ K ≤ N. Считать, что параметр N не превосходит 20. Для уменьшения количества рекурсивных вызовов описать вспомогательный двумерный массив для хранения уже вычисленных чисел C(N, K) и обращаться к нему при выполнении функции Combin2.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.05.2011, 17:40
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Рекурсия: нахождение числа сочетаний из N элементов по K (C++):

Нахождение числа сочетаний - C++
Прошу помочь: Подсчитать число сочетаний из чисел 1,2…,N£7 по M£N, сумма элементов которых не превосходит заданного числа S.

Рекурсия: найти количество элементов массива, больших заданного числа А - C++
В массиве целых чисел с помощью рекурсивной функции найти количество элементов, больших заданного числа А #include&lt;stdio.h&gt; ...

Рекурсия: нахождение биномиального коэффициента - C++
Собственно задача поставлена предельно просто, найти биномиальный коэффициент, используя рекурсию. Из своих скудных знаний выходит примерно...

Рекурсия: нахождение биномиальных коэффициентов - C++
В общем нужно вывести биноминальные коэффициенты последовательности.... т.е есть последовательность - скажем вектор 12345 n = size =...

Рекурсия: нахождение двойного факториала - C++
Помогите пожалуйста как это можно написать. Y=(2*n+1)!!*(2*m+1)!!/(2*(m+n)+1)!!,где m,n неотрицательные целые числа.Для определения...

Рекурсия, нахождение минимума в массиве - C++
В общем, в названии темы само задание. int min(int a,int n) { int minim=a; if(minim&gt;a) {minim=a; return min(a,n-1);} else...

1
lemegeton
2931 / 1360 / 136
Регистрация: 29.11.2010
Сообщений: 2,725
15.05.2011, 21:09 #2
Что если при вызове функции K > N?
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
#include <stdio.h>
#include <math.h>
 
// this matrix might be hidden in function
// but it would look ugly
// also, this matrix might be optimized,
// but I don't give a damn
static int cache[20][20] = {
  { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
  { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
  { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
  { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
  { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
  { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
  { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
  { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
  { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
  { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
  { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
  { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
  { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
  { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
  { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
  { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
  { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
  { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
  { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
  { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }
  };
 
size_t Combine(size_t N, size_t K) {
  if ((K == 0) || (N == K)) return 1;
  if (cache[N][K] != 0) return cache[N][K];
  return cache[N][K] = Combine(N - 1, K) + Combine(N - 1, K - 1);
  return 0;
}
 
int main(int argc, char **argv) {
  int i, j;
  for (i = 0; i < 20; ++i)
    for (j = 0; j <= i; ++j)
      printf("%d for %d = %d\n", i, j, Combine(i, j));
 
  return 0;
}
1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.05.2011, 21:09
Привет! Вот еще темы с ответами:

Вычисление числа сочетаний из N по M - C++
Напишите программу для вычисления числа сочетаний из N по M. Число сочетаний определяется по формуле N!/(M!*(N-M)!, где N - количество...

Рекурсия: нахождение минимального элемента массива - C++
Определить рекурсивную функцию,возвращающую минимальный элемент массива.Использовать её для одномерного массива,содержащего n целых...

Нахождение количества строк двумерного массива сумма элементов которых меньше заданного числа - C++
Разработайте программу для нахождения количества строк двумерного массива Mas(nxm), сумма элементов которых меньше заданного числа k. ...

Рекурсия: нахождение чисел Фибоначчи (нужны комментарии) - C++
это функция нахождения чисел фибоначи. немогу понять как она работает можите написат как это происходит в программе. отладка много не...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru