About programming :))
- leikind
- Неотъемлемая часть форума
- Сообщения: 811
- Зарегистрирован: 20 июн 2002, 03:02
- Откуда: Брюссель
- Контактная информация:
Форум о программировании ;-))
class Fact { // факториал на Java
public static void main(String[] args){
System.out.println(getFactorial(6));
}
private static int getFactorial(int n){
if (n == 0){
return 1;
} else {
return n * (getFactorial(n-1));
}
}
}
public static void main(String[] args){
System.out.println(getFactorial(6));
}
private static int getFactorial(int n){
if (n == 0){
return 1;
} else {
return n * (getFactorial(n-1));
}
}
}
- leikind
- Неотъемлемая часть форума
- Сообщения: 811
- Зарегистрирован: 20 июн 2002, 03:02
- Откуда: Брюссель
- Контактная информация:
Форум о программировании ;-))
#!/bin/sh
# Шелл - это еще и язык программирования )
function factorial(){
if test $1 = "0"
then
echo 1
else
echo $(($1*`factorial $(($1-1))`))
fi
}
factorial 6
# Шелл - это еще и язык программирования )
function factorial(){
if test $1 = "0"
then
echo 1
else
echo $(($1*`factorial $(($1-1))`))
fi
}
factorial 6
- leikind
- Неотъемлемая часть форума
- Сообщения: 811
- Зарегистрирован: 20 июн 2002, 03:02
- Откуда: Брюссель
- Контактная информация:
Форум о программировании ;-))
#!/usr/bin/perl
sub factorial {
my $n = shift ; # ну шо ета за argument passing?
if ($n==0){
1
}else{
$n * factorial($n-1)
}
}
print factorial(6), "\n";
sub factorial {
my $n = shift ; # ну шо ета за argument passing?
if ($n==0){
1
}else{
$n * factorial($n-1)
}
}
print factorial(6), "\n";
- leikind
- Неотъемлемая часть форума
- Сообщения: 811
- Зарегистрирован: 20 июн 2002, 03:02
- Откуда: Брюссель
- Контактная информация:
Форум о программировании ;-))
-- 3 способы на Haskell
-- самый неэффективный однако
fac1 :: Int -> Int
fac1 n = product[1..n]
fac2 :: Int -> Int
fac2 0 = 1
fac2 (n+1) = (n+1) * fac3 n
-- самый эффективный
fac3 :: Int -> Int
fac3 0 = 1
fac3 n = n * fac2 (n-1)
-- самый неэффективный однако
fac1 :: Int -> Int
fac1 n = product[1..n]
fac2 :: Int -> Int
fac2 0 = 1
fac2 (n+1) = (n+1) * fac3 n
-- самый эффективный
fac3 :: Int -> Int
fac3 0 = 1
fac3 n = n * fac2 (n-1)
- leikind
- Неотъемлемая часть форума
- Сообщения: 811
- Зарегистрирован: 20 июн 2002, 03:02
- Откуда: Брюссель
- Контактная информация:
Форум о программировании ;-))
;; вариант на Scheme
(define factorial
(lambda
(a)
(if
(<= a 0)
1
(* a (factorial (- a 1)))
)
)
)
(display (factorial 6))
(newline)
(define factorial
(lambda
(a)
(if
(<= a 0)
1
(* a (factorial (- a 1)))
)
)
)
(display (factorial 6))
(newline)
- leikind
- Неотъемлемая часть форума
- Сообщения: 811
- Зарегистрирован: 20 июн 2002, 03:02
- Откуда: Брюссель
- Контактная информация:
Форум о программировании ;-))
;; Cxема еще раз - в прошлом посте смайлик сработал
(define factorial
(lambda
(a)
(if
(<= a 0)
1
(* a (factorial (- a 1)))
)
)
)
(display "factorial of 4: ")
(display (factorial 4))
(newline)
(define factorial
(lambda
(a)
(if
(<= a 0)
1
(* a (factorial (- a 1)))
)
)
)
(display "factorial of 4: ")
(display (factorial 4))
(newline)
- leikind
- Неотъемлемая часть форума
- Сообщения: 811
- Зарегистрирован: 20 июн 2002, 03:02
- Откуда: Брюссель
- Контактная информация:
Форум о программировании ;-))
WANTED:
Python
tcl
OCaml
php
Prolog
Python
tcl
OCaml
php
Prolog
Форум о программировании ;-))
Та же хвостовая рекурсия, как и в случае с Haskel, но на Ruby:
# Tail recursion version
# Reference: http://www.shugo.net/article/cmagazine/3rd/ (Japanese)
def fact_(prod, count, max)
if( count > max )
prod
else
fact_(count * prod, count + 1, max)
end
end
def fact(n)
fact_(1,1,n)
end
# Tail recursion version
# Reference: http://www.shugo.net/article/cmagazine/3rd/ (Japanese)
def fact_(prod, count, max)
if( count > max )
prod
else
fact_(count * prod, count + 1, max)
end
end
def fact(n)
fact_(1,1,n)
end
/ AB
Форум о программировании ;-))
напиши...
времени с nasm'ом разбираться нет...
времени с nasm'ом разбираться нет...
Форум о программировании ;-))
;; чисто логическая реализация - должна работать везде
;; т.к. мы пользуемся только логическими структурами
;;
;; определим предикат для натуральных чисел n (X)
;; 0 -> 0
;; s(0) -> 1
;; ... (число может выражаться не только цифрами)
n (0).
n (s(X)) -> n (X).
;; определим предикат сложения для plus X + Y==Z
;; (он же предикат вычитания)
plus (0,Y,Y) .
plus (s(X), Y, s (Z)) -> plus (X,Y,Z).
;; теперь умножение (оно же деление)
mult (0,X,0).
mult (s(X),Y,Z) -> mult (X,Y,W), plus (W,Y,Z).
;; ну все теперь долгожданный
factorial (0, s(0)).
factorial (s(N), F) -> factorial (N, F1), mult (s(N), F1, F).
думаю на турбо прологе можно реализовать что-то поэффективнее,
но это не относится к языку в целом
2ab а в Ruby, что есть оптимизация хвостовой рекурсии?
;; т.к. мы пользуемся только логическими структурами
;;
;; определим предикат для натуральных чисел n (X)
;; 0 -> 0
;; s(0) -> 1
;; ... (число может выражаться не только цифрами)
n (0).
n (s(X)) -> n (X).
;; определим предикат сложения для plus X + Y==Z
;; (он же предикат вычитания)
plus (0,Y,Y) .
plus (s(X), Y, s (Z)) -> plus (X,Y,Z).
;; теперь умножение (оно же деление)
mult (0,X,0).
mult (s(X),Y,Z) -> mult (X,Y,W), plus (W,Y,Z).
;; ну все теперь долгожданный
factorial (0, s(0)).
factorial (s(N), F) -> factorial (N, F1), mult (s(N), F1, F).
думаю на турбо прологе можно реализовать что-то поэффективнее,
но это не относится к языку в целом
2ab а в Ruby, что есть оптимизация хвостовой рекурсии?
Форум о программировании ;-))
надеюсь вы догадались, что это на Прологе
для тех кого заинтересовало см. Стерлиг и Шапиро Искусство Программирования на языке Пролог
;0
для тех кого заинтересовало см. Стерлиг и Шапиро Искусство Программирования на языке Пролог
;0
О программировании ;-))
Пипл, судорожно вспоминнаю PL/1... К утру будет.
Опыт растет прямо пропорционально выведенному из строя оборудованию
- leikind
- Неотъемлемая часть форума
- Сообщения: 811
- Зарегистрирован: 20 июн 2002, 03:02
- Откуда: Брюссель
- Контактная информация:
О программировании ;-))
А вот и Сергей с Прологом.
Реализации на других языках понятны, имхо,
даже для тех, кто не знает их. А вот Пролог.......
Реализации на других языках понятны, имхо,
даже для тех, кто не знает их. А вот Пролог.......
- leikind
- Неотъемлемая часть форума
- Сообщения: 811
- Зарегистрирован: 20 июн 2002, 03:02
- Откуда: Брюссель
- Контактная информация:
О программировании ;-))
# tcl версия предоставлена tren
proc factorial {a} {
if {$a == 0} {
return 1
} else {
return [expr $a * [factorial [expr $a - 1]]]
}
}
puts [factorial 4]
proc factorial {a} {
if {$a == 0} {
return 1
} else {
return [expr $a * [factorial [expr $a - 1]]]
}
}
puts [factorial 4]