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

Вычислить сумму факториалов чисел

06.04.2013, 23:25. Показов 2679. Ответов 7
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
.Для данной составить задачи две программы: непосредственное функциональное описание и программу, основанную на «хвостовой» рекурсии. Вычислить сумму факториалов чисел от 1 до n.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
06.04.2013, 23:25
Ответы с готовыми решениями:

Вычислить сумму целых чисел от a до b
Помогите решить задачу: Вычислить сумму целых чисел от a до b. Я знаю как сложить 2 числа, но как...

Вычислить сумму факториалов чисел от 1-10
Подпрограмма Вычислить сумму факториалов чисел от 1-10

Вычислить сумму факториалов нечетных чисел от 1 до n
1. Вычислить сумму факториалов нечетных чисел от 1 до n. Вычисление факториала оформить в функции....

Вычислить сумму факториалов всех введенных чисел
С клавиатуры вводится строго возрастающая последовательность натуральных чисел до тех пор, пока...

7
Эксперт функциональных языков программированияЭксперт Java
4486 / 2721 / 485
Регистрация: 28.04.2012
Сообщений: 8,590
07.04.2013, 09:57 2
Лучший ответ Сообщение было отмечено как решение

Решение

Lisp
1
2
3
4
5
6
7
8
9
10
(defun fac/rec (n)
  (if (< n 2)
      1
      (* n (fac/rec (- n 1)))))
 
(defun sum/rec (n)
  (if (< n 2)
      1
      (+ (fac/rec n)
         (sum/rec (- n 1)))))
Lisp
1
2
3
4
5
6
7
8
9
10
(defun fac/tail (n &optional (acc 1))
  (if (< n 2)
      acc
      (fac/tail (- n 1) (* n acc))))
 
(defun sum/tail (n &optional (acc 0))
  (if (< n 2)
      (+ acc 1)
      (sum/tail (- n 1)
               (+ (fac/tail n) acc))))
4
Модератор
Эксперт функциональных языков программированияЭксперт Python
36601 / 20330 / 4220
Регистрация: 12.02.2012
Сообщений: 33,639
Записей в блоге: 13
07.04.2013, 12:42 3
Лучший ответ Сообщение было отмечено как решение

Решение

Но гораздо быстрее это можно сосчитать "в одно действие". Рекурсией:

Lisp
1
2
3
4
5
6
7
8
9
10
11
(defun sum-fact (n &optional (s 0) (f 1) (p 2))
  (cond ((> p n) (+ s f))
        (t (sum-fact n (+ s f) (* f p) (+ p 1)))))
 
==> sum-fact
 
(sum-fact 100)
 
==>
 
94269001683709979260859834124473539872070722613982672442938359305624678223479506023400294093599136466986609124347432647622826870038220556442336528920420940313
Или итерацией:

Lisp
1
2
3
4
5
6
7
8
9
10
(defun sum-fact-i (n)
  (let ((f 1))
       (iter (for i from 1 to n) (setq f (* f i)) (summing f))))
 
 
==> sum-fact-i
 
(sum-fact-i 20)
 
==> 2561327494111820313
3
4699 / 4394 / 380
Регистрация: 12.05.2012
Сообщений: 3,096
07.04.2013, 14:08 4
Лучший ответ Сообщение было отмечено как решение

Решение

как вариант:
Lisp
1
2
3
4
5
6
7
8
(defun factorial (n)
   (if (zerop n) 1 (* (factorial (1- n)) n)))
 
(defun factorial+ (n)
  (if (zerop n) 0 (+ (factorial+ (1- n)) (factorial n))))
 
> (factorial+ 20) 
2561327494111820313
Lisp
1
2
3
4
5
6
(defun factorial+ (n)
  (loop for a from 1 to n
        for m = a then (* a m) sum m))
 
> (factorial+ 20) 
2561327494111820313
4
0 / 0 / 0
Регистрация: 11.10.2013
Сообщений: 2
11.10.2013, 13:32 5
Объясните, пожалуйста, эту строчку. Где здесь происходит сложение?
for m = a then (* a m) sum m))
0
Эксперт функциональных языков программированияЭксперт Java
4486 / 2721 / 485
Регистрация: 28.04.2012
Сообщений: 8,590
11.10.2013, 14:01 6
sum m

http://www.gigamonkeys.com/boo... belts.html
0
0 / 0 / 0
Регистрация: 11.10.2013
Сообщений: 2
11.10.2013, 14:09 7
Эта функция ранее не описывалась,а встроенной такой же вроде бы нет?
0
4699 / 4394 / 380
Регистрация: 12.05.2012
Сообщений: 3,096
11.10.2013, 16:15 8
sum (summing) - ключевое слово макроса loop:
http://lisper.ru/pcl/pcl.pdf
глава 22.
0
11.10.2013, 16:15
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
11.10.2013, 16:15
Помогаю со студенческими работами здесь

Вычислить сумму факториалов всех нечетных чисел от 1 до 9
вычислить сумму факториалов всех нечетных чисел от 1 до 9

Вычислить сумму факториалов всех нечетных чисел от 1 до 9
Можете ли вы переписать эту программу через procedure или function заранее спасибо Вычислить...

Вычислить сумму факториалов всех нечетных чисел от 1 до 9
C++ for dos v.3.1. вычислить сумму факториалов всех нечетных чисел от 1 до 9 вот что у меня...

Вычислить сумму факториалов всех введенных чисел
С клавиатуры вводится строго возрастающая последовательность натуральных чисел до тех пор, пока...


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

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