Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.64/11: Рейтинг темы: голосов - 11, средняя оценка - 4.64
 Аватар для dev.nikor
29 / 30 / 3
Регистрация: 26.07.2010
Сообщений: 297

Объяснение рекурсии на примере вычисления биномиального коэффициэнта

30.09.2012, 21:57. Показов 2131. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго времени суток, имеется программа, позволяющая вычислять биномиальный коэффициент:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
using System;
 
namespace Recursion
{
    class Program
    {
        static void Main()
        {
            Console.WriteLine("Введите m");
            int m = int.Parse(Console.ReadLine());
            Console.WriteLine("Введите n");
            int n = int.Parse(Console.ReadLine());
            Console.WriteLine("Answer: {0}", C(m,n));
            Console.ReadKey();
        }
        static int C(int m, int n)
        {
            if ((m == 0) || m == n) return 1;
            return C(m, n - 1) + C(m - 1, n - 1);
        }
    }
}
Тут я не могу понять, как работает рекурсия в этом случае. Объясните пожалуйста.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
30.09.2012, 21:57
Ответы с готовыми решениями:

объяснение рекурсии
Решил задачу на рекурсию F(1) = 1, F(2) = 3, F(n) = F(n−1) * F(n−2) + (n−2) function f(n) { if (n == 1) return 1; else if...

Объяснение кода рекурсии
Доброго времени суток! Есть такая рекурсия, вычисляет наибольший элемент: #include <stdio.h> int bigger(int a, int b){ if(...

Что такое логические операции (желательно объяснение на примере)
Оператор Значение & И | ИЛИ ^ Исключающее ИЛИ && Укороченное И || Укороченное ИЛИ ! НЕ Объясните пожалуйста что это такое и...

4
Master of Orion
Эксперт .NET
 Аватар для Psilon
6102 / 4958 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
30.09.2012, 22:34
darklagger,

То есть крайние всегда единицы, а остальные мы получаем из того соотношения, что каждое число равно сумме двух, находящихся над ним Например вторая строчка 1 2 1, двойку мы получаем из того, что 1+1 = 2, в четвертой строчке 1 4 6 4 1, под ними получаем 5 = 1+4, 10 = 4+6, 10 = 6+4, 5 = 4+1 и так далее
0
Master of Orion
Эксперт .NET
 Аватар для Psilon
6102 / 4958 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
30.09.2012, 22:44
Вот понятная картинка


То же на википедии (объяснение вашего алгоритма черным по белому )
http://ru.wikipedia.org/wiki/%... 0.BB.D1.8B
Изображения
 
0
 Аватар для dev.nikor
29 / 30 / 3
Регистрация: 26.07.2010
Сообщений: 297
30.09.2012, 23:07  [ТС]
Psilon, не то, мне хотелось бы узнать, как работает вот эта строчка кода:
C#
1
return C(m, n - 1) + C(m - 1, n - 1);
сначала рекурсивно выполняется вот эта функция: C(m, n - 1), а потом вот эта: C(m - 1, n - 1)?
и ещё, например мы рекурсивно дошли до того момента, как первая функция вернула 1, получаем
1 + C(m - 1, n - 1) идём рекурсивно по 2й функции, получаем 1+1, значит возвращаем в вызывающую функцию 2 (в ф-ю С) и что дальше? как дальше идут вычисления?
0
Master of Orion
Эксперт .NET
 Аватар для Psilon
6102 / 4958 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
30.09.2012, 23:09
darklagger, я же и так максимально подробно расписал? Чтобы найти значение, ищем суммы двух расположенных над числом, у тех ищем их значение по сумме над ними, та делает .пока не дойдем до вершины, там ответ 1, дальше спускаемся и получаем ответ.
Первые две строчки пирамиды не обрабатываются, потому что проходит условие
C#
1
if ((m == 0) || m == n) return 1;
и дальше мы не идем
1)Третья стрчка, единички не обрабатываются (по вышесказанному условию), а двойку получаем как сумму двух над ней (C(m, n - 1) + C(m - 1, n - 1)), то есть 1+1
2) А после вызова двух копий функции идет выход из метода и никаких вычислений дальше не идет
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
30.09.2012, 23:09
Помогаю со студенческими работами здесь

Рекурсия для вычисления биномиального коэффициента
Моя программа рекурсивно описывает функцию C(n,m) вычисления биномиального коэффициента по следующей формуле: C(n,0) = C(n,n) = 1;...

Рекурсивная функция вычисления биномиального коэффициента C
Помогите написать рекурсивную функцию для вычисления биномиального коэффициента C, посмотрите я начал, но неправильно static...

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

Описать функцию для вычисления биномиального коэффициента
помогите пожалуйста а то у меня завал просто ( Задача: рекурсивно описать функцию C (m, n) где 0 <= m = <n для вычисления...

Функция вычисления биномиального коэффициента по формуле сочетаний
Нужно написать функцию, которая будет считать по формуле сочетаний n!/((k!)(n-k)!). Заголовок функции должен быть такой: function...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
Автозаполнение реквизита при выборе элемента справочника
Maks 27.03.2026
Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. При выборе "Спецтехники" (Тип Справочник. Спецтехника), заполняется. . .
Сумматор с применением элементов трёх состояний.
Hrethgir 26.03.2026
Тут. https:/ / fips. ru/ EGD/ ab3c85c8-836d-4866-871b-c2f0c5d77fbc Первый документ красиво выглядит, но без схемы. Это конечно не даёт никаких плюсов автору, но тем не менее. . . всё может быть. . .
Автозаполнение реквизитов при создании документа
Maks 26.03.2026
Программный код из решения ниже размещается в модуле объекта документа, в процедуре "ПриСозданииНаСервере". Алгоритм проверки заполнения реализован для исключения перезаписи значения реквизита,. . .
Команды формы и диалоговое окно
Maks 26.03.2026
1. Команда формы "ЗаполнитьЗапчасти". Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. В качестве источника данных. . .
Кому нужен AOT?
DevAlt 26.03.2026
Решил сделать простой ланчер Написал заготовку: dotnet new console --aot -o UrlHandler var items = args. Split(":"); var tag = items; var id = items; var executable = args;. . .
Отправка уведомления на почту при создании или изменении элементов справочника
Maks 24.03.2026
Программная отправка письма электронной почты на примере типового справочника "Склады" в конфигурации БП3. Перед реализацией необходимо выполнить настройку системной учетной записи электронной. . .
модель ЗдравоСохранения 5. Меньше увольнений- больше дохода!
anaschu 24.03.2026
Теперь система здравосохранения уменьшает количество увольнений. 9TO2GP2bpX4 a42b81fb172ffc12ca589c7898261ccb/ https:/ / rutube. ru/ video/ a42b81fb172ffc12ca589c7898261ccb/ Слева синяя линия -. . .
Midnight Chicago Blues
kumehtar 24.03.2026
Такой Midnight Chicago Blues, знаешь?. . Когда вечерние улицы становятся ночными, а ты не можешь уснуть. Ты идёшь в любимый старый бар, и бармен наливает тебе виски. Ты смотришь на пролетающие. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru