2つ再帰関数呼び出したら最適化されないのでは?
コンパイラそんなに優秀かな。
普通にループとmallocを使ったほうがいいと思う。
最適化かからなくなるのが怖いから再帰は使わないな。