|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
24.05.2013, 20:44 | #1 |
Пользователь
Регистрация: 30.10.2010
Сообщений: 13
|
рекурсивная функция
Доброго времени суток!
Делаю лабораторку, задание звучит так: "Написать программу, использующую рекурсивную функцию для определения, является ли число "почти совершенным". "Почти совершенное" число – это число из ряда натуральных чисел, которое равно сумме своих делителей, не обязательно всех (исключая само число)" Почти совершенное число, например 12: его делители - 1 2 3 4 6 12=6+3+2+1 12=6+4+2 и т.д подскажите, пожалуйста как эту задачку решить? я так понимаю нужно перебором искать суммы делителей числа, а вот как это сделать чет пока не понимаю на с++ делаю |
24.05.2013, 21:19 | #2 |
Старожил
Регистрация: 25.10.2011
Сообщений: 3,178
|
Что-то до меня категорически не доходит, где здесь органично вписывается рекурсия.
Нет, вписать-то можно, но обоснование будет для начинающего, самое малое, зубодробительным. 1) Пусть критерий принадлежности числа к почти совершенным - P(n). То есть, P(12) - "верно", P(17) - "неверно". 2) Введём вспомогательное множество троек, заданное критерием Q(n, s, m), соответствующее "s - сумма некоторых делителей n, каждый из которых не меньше m и s можно дополнить некоторыми делителями n меньшими m до суммы, равной n". Перечитайте это ещё раз. То есть, Q(12, 6, 5) - "верно" (к 6 можно добавить делители 12 3, 2 и 1 и в сумме получится 12), а Q(12, 6, 3) - "неверно" (меньше 3 только делители 2 и 1, если прибавить их к 6, 12 мы не получим). 3) Если P(n), то Q(n, 0, n-1) и наоборот. Подумайте, почему. 4) Q(n, n, x) - "верно"; Q(n, y, 1), при y<n -"неверно", Q(n, y, x) при y>n - "неверно". 5) Q(n, s, m) "верно" если и только если Q(n, s, m-1) либо {(n делится на m-1) и Q(n, s+m-1, m-1)}. (Q(n, s, m) верно - значит, к s можно добавить какие-то делители меньше m так чтобы получить n; этот набор либо включает m-1, либо не включает.) 6) А теперь - код (по сути - прямой перенос наших пунктов 3), 4) и 5)): Код:
Последний раз редактировалось Abstraction; 24.05.2013 в 22:42. Причина: Исправление: пункт 3) - критерий, а не свойство. |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Рекурсивная функция | Solidera | Помощь студентам | 6 | 02.04.2013 09:45 |
Рекурсивная функция | --1990Артём | Помощь студентам | 1 | 09.12.2012 10:21 |
Си.Рекурсивная функция | Alina111 | Visual C++ | 1 | 01.07.2012 03:27 |
Си++. Рекурсивная функция. | Diamond2107 | Помощь студентам | 6 | 02.12.2009 19:48 |