Форум программистов, компьютерный форум, киберфорум
Haskell
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.50/8: Рейтинг темы: голосов - 8, средняя оценка - 4.50
0 / 0 / 0
Регистрация: 11.01.2017
Сообщений: 12
1

Рекурсивные функции

20.01.2018, 22:35. Показов 1482. Ответов 2
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Функция twopow n, которая вычисляет 2n, исходя из следующих соображений. Пусть необходимо возвести 2 в степень n.
Если n четно, т.е. n = 2k, то 2n = 22k = (2k)2. Если n нечетно, т.е. n = 2k + 1, то
2n = 22k+1 = 2 · (22k). Функция twopow не должна использовать оператор ^ или любую функцию возведения в
степень из стандартной библиотеки. Количество рекурсивных вызовов функции должно быть пропорционально logn.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
20.01.2018, 22:35
Ответы с готовыми решениями:

Рекурсивные функции
1. Определите функцию, принимающую на вход целое число n и возвращающую список, содержащий n ...

Рекурсивные функции
Помогите пожалуйста с программами. Чет совсем не понимаю этот Haskell. 1) Функция перестановки...

Рекурсивные функции
Функция, принимающая на входе список вещественных чисел и вычисляющую их арифметическое среднее....

Определить рекурсивные функции для решения задачи
Определите рекурсивные функции для решения задачи: Вычислить количество вхождений в числовой список...

2
Модератор
5047 / 3276 / 526
Регистрация: 01.06.2013
Сообщений: 6,806
Записей в блоге: 9
20.01.2018, 23:06 2
Haskell
1
2
3
4
5
twopow  :: Int -> Int
twopow  0 = 1
twopow  n = let (k,m) = n `divMod` 2 
                i     = twopow k
            in (m+1) * i * i
3
Модератор
Эксперт функциональных языков программированияЭксперт Python
36606 / 20334 / 4221
Регистрация: 12.02.2012
Сообщений: 33,653
Записей в блоге: 13
21.01.2018, 10:04 3
А вот код, который возвращает кортеж (p,k), где p - степень двойки, а k - число умножений:

Haskell
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
pow2 :: Integer -> (Integer,Integer)
pow2 0 = (1,0)
pow2 1 = (2,0)
pow2 n | (m==0) = (p*p,k+1)
       | otherwise = (p*p*2,k+2)
         where m = n `mod` 2
               t = n `div` 2
               (p,k) = pow2 t 
 
*Main> pow2 2
(4,1)
*Main> pow2 9
(512,4)
*Main> pow2 40
(1099511627776,6)
2
21.01.2018, 10:04
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
21.01.2018, 10:04
Помогаю со студенческими работами здесь

Рекурсивные функции: нахождение n-го члена последовательности, заданной рекуррентной формулой
Доброе время суток! Помогите пожалуйста с решением задачи. Написать программу для нахождения n-го...

Рекурсивные типы данных
Добрый день, подскажите пожалуйста, чем отличаются такие конструкции при определении рекурсивного...

Взаимно рекурсивные модули
Читаю стандарт Хаскеля 98. Из этого по идеи следует, что можно сделать так... --Файл...

Рекурсивные структуры данных с синхронным обходом
Обращаюсь за помощью к знающим тему. Ситуация такая. Есть два рекурсивных типаdata Pattern =...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru