Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
если можно достаточно просто заменить рекурсию — циклом, я считаю что всегда это нужно делать.
def F(x, step = 1, acc = 1)
{
| (y,_,_) when (y<=0) => acc
| (_,_,_) => F(x-step, step, acc*x)
}
Assert.AreEqual(6,F(3));
def F2(x) { if (x%2==0) F(x,2) else F(x-1,2) }
fib = fst . fib2 where
-- | Return (fib n, fib (n + 1))
fib2 0 = (1, 1)
fib2 1 = (1, 2)
fib2 n
| even n = (a*a + b*b, c*c - a*a)
| otherwise = (c*c - a*a, b*b + c*c)
where (a,b) = fib2 (n `div` 2 - 1)
c = a + b
funny n = product $ map fib [1..n]
main = putStrLn $ show $ funny 5
product [x | x <- fibs, x <= n]
product (takeWhile (<= n) fibs)
— tenshiFunc для n это:
— перемножить. те, что чётные. от 1 до n
tenshiFunc n = (product. filter even) [1… n]
product [2, 4 .. n]
>>> a=[1,2,3,4,5] >>> sum(a) 15Зачем еще какие-то функции вводить?
>>> sum([x for x in a if x%2==0]) 6
sum [1..5]
sum [x | x <- a, even x]
foldr f z (x:xs) = f x (foldr f z xs)
int sum(int *a, size_t length) {
if (length == 0)
return 0;
return a[0] + sum(a+1, length-1);
}
Почему циклы должны умереть