add some comment and recursive method