function Tree() { this.lines = [ [1] ] } var pp = Tree.prototype pp.genNode = function(line, i) { var top = line - 1 var topLine = this.lines[top] || [0, 0, 0] var curLine = this.lines[line] if (!curLine) { curLine = this.lines[line] = [] } if (i in curLine) return curLine[i] = (topLine[i - 1] || 0) + (topLine[i] || 0) } pp.genLine = function(n) { for (var i = 0; i <= n; i++) { this.genNode(n, i) } } pp.print = function() { for (var i = 0; i < this.lines.length; i++) { var el = this.lines[i] console.log(el.join(', ')) } } var tree = new Tree for (var i = 0; i < 10; i++) { tree.genLine(i) } tree.print()