0 / 0 / 0
Регистрация: 04.01.2017
Сообщений: 52
1

Что делает эта рекурсивная функция?

14.02.2018, 20:54. Показов 952. Ответов 8
Метки нет (Все метки)

Добрый день. Можете подсказать, что делает эта функция? Явно связана с двоичной системой, но не могу понять, что именно.

C++
1
2
3
4
5
6
7
int f(int n){
    if (n == 0) {
        return 1;
    } else {
        return f(n/2) + (n%2);
    }
}
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
14.02.2018, 20:54
Ответы с готовыми решениями:

что делает эта функция?
она создаёт массив списков? void create_massiv_of_lists(node** x,int l) { int i,n; for...

Что делает эта функция?
Здравствуйте! У меня есть следующая функция, однако не совсем понимаю, что она делает. Кто-то может...

Что делает эта функция?
func(x) { if (x == 0) { return 0 } return func(x / 10) + x % 10 }

Что делает эта функция?
Что делает эта функция? int vich_cods(const void *a, const void *b){ // return *(char*)a -...

8
299 / 208 / 174
Регистрация: 11.05.2016
Сообщений: 655
14.02.2018, 21:11 2
Лучший ответ Сообщение было отмечено BigBoss97 как решение

Решение

BigBoss97, возвращает ((кол-во единиц в двоичной записи десятичного числа) +1)
1
Диссидент
Эксперт C
27316 / 17038 / 3765
Регистрация: 24.12.2010
Сообщений: 38,366
14.02.2018, 21:15 3
Кажется, подсчитывает количество единичных разрядов в двоичном представлении числа. +1.
Не самый удачный алгоритм.
2
║XLR8║
1212 / 909 / 270
Регистрация: 25.07.2009
Сообщений: 4,361
Записей в блоге: 5
15.02.2018, 00:32 4
Цитата Сообщение от Байт Посмотреть сообщение
Не самый удачный алгоритм.
Согласен.

BigBoss97,
C++
1
2
3
4
5
6
std::size_t f(int n)
{
    std::size_t count = 0;
    while (n) count += n & 1, n >>= 1;
    return count + 1;
}
Хотел показать итеративный метод... всё равно как-то... калично.
0
299 / 208 / 174
Регистрация: 11.05.2016
Сообщений: 655
15.02.2018, 01:01 5
Цитата Сообщение от outoftime Посмотреть сообщение
+ 1
Мне кажется +1 тут изначально - костыль

Добавлено через 23 минуты
есть же еще готовое:

C++
1
2
3
    int x = 1023;
    std::bitset<64> a(x);
    std::cout << a.count();
1
║XLR8║
1212 / 909 / 270
Регистрация: 25.07.2009
Сообщений: 4,361
Записей в блоге: 5
15.02.2018, 01:12 6
Цитата Сообщение от Herji Посмотреть сообщение
Мне кажется +1 тут изначально - костыль
Как и мне, решил просто сделать как в оригинале, просто интеративно.

А на счет std::bitset это да. Можно, кстати, не объявлять переменную. Временного объекта будет достаточно.

C++
1
std::cout << std::bitset<32>(x).count();
int всё еще 32-х битный, вроде как.
1
Диссидент
Эксперт C
27316 / 17038 / 3765
Регистрация: 24.12.2010
Сообщений: 38,366
15.02.2018, 12:15 7
C++
1
2
3
4
5
count = 0;
while(n) {
  count++;
  n = n &(n-1);
}
Старый бандитский прием

Добавлено через 10 минут
Но есть и круче. См. Рейнгольд, Нивергельт, Део "Комбинаторные алгоритмы"
0
Любитель чаепитий
3734 / 1793 / 563
Регистрация: 24.08.2014
Сообщений: 5,998
Записей в блоге: 1
15.02.2018, 12:18 8
Цитата Сообщение от outoftime Посмотреть сообщение
int всё еще 32-х битный
это зависит от платформы.
по стандарту int должен быть как минимум 16 бит.
http://en.cppreference.com/w/cpp/language/types
1
Диссидент
Эксперт C
27316 / 17038 / 3765
Регистрация: 24.12.2010
Сообщений: 38,366
15.02.2018, 12:25 9
Цитата Сообщение от GbaLog- Посмотреть сообщение
это зависит от платформы.
Скорее, от транслятора.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
15.02.2018, 12:25
Помогаю со студенческими работами здесь

что делает эта программа на С++?
#include &lt;stdio.h&gt; #include &lt;string.h&gt; #include &lt;conio.h&gt; void main() { char g; int j,i;...

Что делает эта программка?
#define NN 15 main() {float x1; int kk=0, i; ... /* ввод x1*/ for(i=NN-1; i&gt;0; i--) ...

Что делает эта строка?
for(int ij= 0; ij&lt; m; ij++)

что делает эта программа?
здравствуйте! подскажите пожалуйста что делает данная программа...я так думаю он должен выводить...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru