Вот реализация на Haskell (и я нахожу реализация чрезвычайно красивая):
Код: Выделить всё
pascal 0 = [1]
pascal n = zipWith (+) (0:pascal (n-1)) (pascal (n-1) ++ [0])
Ниже представлена моя попытка реализовать это на C++23:
Код: Выделить всё
#include
#include
#include
namespace stdv = std::views;
std::vector triangle_row(int n);
auto add = [](auto a, auto b) {return a + b; };
std::vector triangle_row(int n) {
if (n == 0) {
return {1};
}
else {
auto left = (triangle_row(n-1)).insert(triangle_row(n-1).begin(), 0);
auto right = (triangle_row(n-1)).insert(triangle_row(n-1).end(),0);
auto tri_row = stdv::zip_transform(add, left, right);
return tri_row;
}
}
Код: Выделить всё
: In function 'std::vector triangle_row(int)':
:17:41: error: no match for call to '(const std::ranges::views::_ZipTransform) (&, __gnu_cxx::__normal_iterator&, __gnu_cxx::__normal_iterator&)'
17 | auto tri_row = stdv::zip_transform(add, left, right);
| ~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~
...
Подробнее здесь: https://stackoverflow.com/questions/793 ... l-triangle