#include <vector>
#include <iostream>
// Here is your recursive function!
// Ok ok, that's cheating...
unsigned int fact(unsigned int n)
{
if(n == 0) return 1;
else return n * fact(n - 1);
}
unsigned int binom(unsigned int n, unsigned k)
{
// Not very optimized (useless multiplications)
// But that's not really a problem: the number will overflow
// way earlier than you will notice any performance problem...
return fact(n) / (fact(k) * fact(n - k));
}
std::vector<unsigned int> pascal(unsigned n)
{
std::vector<unsigned int> res;
for(unsigned int k = 0; k <= n; k++)
res.push_back(binom(n,k));
return res;
}
std::ostream& operator<<(std::ostream& out, const std::vector<unsigned int>& v)
{
for(unsigned int t = 0; t < v.size(); t++)
out << v[t] << " ";
return out;
}
int main()
{
for(unsigned int t = 0; t < 6; t++)
std::cout << pascal(t) << "\n";
}
CiAgICAjaW5jbHVkZSA8dmVjdG9yPgogICAgI2luY2x1ZGUgPGlvc3RyZWFtPgoKICAgIC8vIEhlcmUgaXMgeW91ciByZWN1cnNpdmUgZnVuY3Rpb24hCiAgICAvLyBPayBvaywgdGhhdCdzIGNoZWF0aW5nLi4uCiAgICB1bnNpZ25lZCBpbnQgZmFjdCh1bnNpZ25lZCBpbnQgbikKICAgIHsKICAgICAgICBpZihuID09IDApIHJldHVybiAxOwogICAgICAgIGVsc2UgcmV0dXJuIG4gKiBmYWN0KG4gLSAxKTsKICAgIH0KCiAgICB1bnNpZ25lZCBpbnQgYmlub20odW5zaWduZWQgaW50IG4sIHVuc2lnbmVkIGspCiAgICB7CiAgICAgICAgLy8gTm90IHZlcnkgb3B0aW1pemVkICh1c2VsZXNzIG11bHRpcGxpY2F0aW9ucykKICAgICAgICAvLyBCdXQgdGhhdCdzIG5vdCByZWFsbHkgYSBwcm9ibGVtOiB0aGUgbnVtYmVyIHdpbGwgb3ZlcmZsb3cKICAgICAgICAvLyB3YXkgZWFybGllciB0aGFuIHlvdSB3aWxsIG5vdGljZSBhbnkgcGVyZm9ybWFuY2UgcHJvYmxlbS4uLgogICAgICAgIHJldHVybiBmYWN0KG4pIC8gKGZhY3QoaykgKiBmYWN0KG4gLSBrKSk7CiAgICB9CgogICAgc3RkOjp2ZWN0b3I8dW5zaWduZWQgaW50PiBwYXNjYWwodW5zaWduZWQgbikKICAgIHsKICAgICAgICBzdGQ6OnZlY3Rvcjx1bnNpZ25lZCBpbnQ+IHJlczsKICAgICAgICBmb3IodW5zaWduZWQgaW50IGsgPSAwOyBrIDw9IG47IGsrKykKICAgICAgICAgICAgcmVzLnB1c2hfYmFjayhiaW5vbShuLGspKTsKICAgICAgICByZXR1cm4gcmVzOwogICAgfQoKICAgIHN0ZDo6b3N0cmVhbSYgb3BlcmF0b3I8PChzdGQ6Om9zdHJlYW0mIG91dCwgY29uc3Qgc3RkOjp2ZWN0b3I8dW5zaWduZWQgaW50PiYgdikKICAgIHsKICAgICAgICBmb3IodW5zaWduZWQgaW50IHQgPSAwOyB0IDwgdi5zaXplKCk7IHQrKykKICAgICAgICAgICAgb3V0IDw8IHZbdF0gPDwgIiAiOwogICAgICAgIHJldHVybiBvdXQ7CiAgICB9CgogICAgaW50IG1haW4oKQogICAgewogICAgICAgIGZvcih1bnNpZ25lZCBpbnQgdCA9IDA7IHQgPCA2OyB0KyspCiAgICAgICAgICAgIHN0ZDo6Y291dCA8PCBwYXNjYWwodCkgPDwgIlxuIjsKICAgIH0KCg==