Форум программистов, компьютерный форум CyberForum.ru

Как это задание сделать через рекурсию? - C++

Восстановить пароль Регистрация
 
litwisha
0 / 0 / 0
Регистрация: 29.09.2012
Сообщений: 59
24.10.2012, 20:36     Как это задание сделать через рекурсию? #1
У меня есть задание посчитать биномальный коэфициент простым способом и через рекурсию.Как это задание сделать через рекурсию?
Простым способом я сделал, нужно теперь это задание через рекурсию сделать.
Простой код:
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
#include<iostream>
#include<math.h>
using namespace std;
int n, k;
double rez,bin1,bin2;
int factorial(int a)
{   int fact=1;
    for(int i=1; i<=a;i++) fact*=i;
    return fact;
}
int main()
{
    
    cout<<"enter n and k"<<endl;
    cin>>n>>k;
    if(k>n) rez==0;
    if(k==0 || k==n) rez=1;
    if(k>0 && k<n)
    { 
        bin1= factorial(n-1)/(factorial(k)*factorial(n-1-k));
        bin2= factorial(n-1)/(factorial(k-1)*factorial(n-k));
        rez= bin1+bin2;
    }
    cout<<rez<<endl;
 
 
    system("pause");
    return 0;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.10.2012, 20:36     Как это задание сделать через рекурсию?
Посмотрите здесь:

C++ Как сделать это задание?
C++ Подскажите, как должно выглядеть это задание?
Число из 10-ой в 2-ю ,через рекурсию. C++
НОД через рекурсию C++
Факториал через рекурсию C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
doctor_lecter
 Аватар для doctor_lecter
279 / 152 / 8
Регистрация: 22.09.2012
Сообщений: 283
24.10.2012, 21:11     Как это задание сделать через рекурсию? #2
C++
1
2
3
4
5
6
7
8
unsigned int func(unsigned int n, unsigned int k) {
    if (n < k)
        return 0;
    else if ((k == 0) || (n == 0))
        return 1;
    else
        return func(n-1, k) + func(n-1, k-1);
}
valeriikozlov
Эксперт C++
 Аватар для valeriikozlov
4660 / 2486 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
24.10.2012, 21:19     Как это задание сделать через рекурсию? #3
doctor_lecter, маленькая опечатка во втором случае.
Thinker
Эксперт C++
 Аватар для Thinker
4215 / 2189 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
24.10.2012, 21:22     Как это задание сделать через рекурсию? #4
C++
1
2
3
4
int C(int n, int k)
{
   return (k == n || k == 0) ? 1 : (k < n ? C(n-1, k) + C(n-1, k-1) : 0);
}
litwisha
0 / 0 / 0
Регистрация: 29.09.2012
Сообщений: 59
24.10.2012, 21:45  [ТС]     Как это задание сделать через рекурсию? #5
Цитата Сообщение от doctor_lecter Посмотреть сообщение
C++
1
2
3
4
5
6
7
8
unsigned int func(unsigned int n, unsigned int k) {
    if (n < k)
        return 0;
    else if ((k == 0) || (n == 0))
        return 1;
    else
        return func(n-1, k) + func(n-1, k-1);
}
Я не совсем понимаю рекурсию, но в вашем коде я не вижу ни операции факториала, ни операции умножения или деления, которые нужны для вычисления биномиальных коэфициентов. Обьясните, пожалуйста, почему
doctor_lecter
 Аватар для doctor_lecter
279 / 152 / 8
Регистрация: 22.09.2012
Сообщений: 283
24.10.2012, 23:07     Как это задание сделать через рекурсию? #6
litwisha, так при вычислении через рекурсию не нужны факториал и т.д. В моем коде написано то определении, которое у вас в 1 посту во вложении.

Например можно посчитать рекурсивно C13
0 < 1 < 3 Это 3 случай
C13 = C12 + C01 = ({3 случай} C11 + C01) + ({2 случай} 1) = [ ({2} 1) + ({2} 1) ] + 1 = 1 + 1 + 1 = 3
Это совпадает, если посчитать по определению 3!/(2!*1!) = 6/2 = 3
Yandex
Объявления
24.10.2012, 23:07     Как это задание сделать через рекурсию?
Ответ Создать тему
Опции темы

Текущее время: 12:46. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru