Jaric Ryan Ответов: 2

Напишите рекурсивную функцию C для вычисления комбинации


Рекурсивное определение для вычисления комбинации n объектов, взятых k за один раз, может быть определено следующим образом:
C (n, k) = {1, Если k = 0 или n = k
C (n-1, k) + C (n-1, k-1), Если n> k> 0
}
Написать рекурсивную функцию C, чтобы реализовать выше.

Что я уже пробовал:

#include<iostream>
02
#include<stdlib.h>
03
using namespace std;
04
 
05
void combination(int m , int n , int result[]);
06
void output(int result[]);
07
int taco;
08
 
09
int main(int argc , char** argv)
10
{
11
    int m, n;
12
    int* result;
13
    m = atoi(argv[1]);
14
    taco = n = atoi(argv[2]);
15
    result = (int*)malloc(sizeof(int)*n); //Dynamic array.
16
    //The size of array is same with n.
17
    for(int i = 0 ; i < n ; i++) result[i] = 0;
18
    combination(m , n , result);
19
}
20
 
21
 
22
void combination(int m , int n , int result[])
23
{
24
  //You have to write your algorithm here
25
}
26
void output(int result[]) //You can call output function after you put result in result[].
27
{
28
    cout<<"< ";
29
    for(int i = taco - 1 ; i >=0 ; i--)
30
        cout<<result[i]<<" ";
31
    cout<<">"<<endl;
32
}

2 Ответов

Рейтинг:
1

Jochen Arndt

Просто поместите определение в функцию C:

int C(int n, int k)
{
    if (k == 0 || n == k)
        return 1;
    else if (n > k)
        return C(n-1, k) + C(n-1, k-1);
    return 0;
}


Richard MacCutchan

Вы не помогаете людям, делая за них домашние задания.

Jochen Arndt

Я знаю и обычно этого не делаю.

Но в данном случае я думал, что указание ему на очевидное дает решение.

Он все еще должен собрать все это вместе, что является большей работой (по крайней мере, для новичка), чем написать код функции из данного определения.

Рейтинг:
0

OriginalGriff

Просто разместив свой домашний вопрос в комплекте с "Вы должны написать свой алгоритм здесь", вы не поможете себе: мы не делаем вашу домашнюю работу: она задана не просто так. Она существует для того, чтобы вы думали о том, что вам сказали, и пытались понять это. Он также существует для того, чтобы ваш наставник мог определить области, в которых вы слабы, и сосредоточить больше внимания на корректирующих действиях.

Попробуйте сами, возможно, вы обнаружите, что это не так сложно, как вы думаете!

Если вы столкнетесь с конкретной проблемой, то, пожалуйста, спросите об этом, и мы сделаем все возможное, чтобы помочь. Но мы не собираемся делать все это для вас!