title: design a recursive program
body: <p>I am not really a newbie in programming, I have been programming for almost three years now. But I still feel frustrated about understanding and designing recursive programs.Sometimes I need to write the whole process down which takes a lot of time. 
  Say this program:
  Convert Sorted Array to a balanced Binary Search Tree</p>
  
  <pre><code>TreeNode* sortedArrayToBST(vector&lt;int&gt;&amp; nums) {
          return help(nums, 0, nums.size()-1);
      }
  
      TreeNode* help(vector&lt;int&gt; &amp;nums, int start, int end){
          int size=end-start;
          if(size&lt;0)    return NULL;
          if(size==0)    return new TreeNode(nums[start]);
          int mid=(start+end)/2;
          TreeNode* root=new TreeNode(nums[mid]);
          root-&gt;left=help(nums, start, mid-1);
          root-&gt;right=help(nums, mid+1, end);
          return root;
      }
  </code></pre>
  
  <p>I have a very hard time tracking how the tree forms....And I definitely cannot design a program like this myself. I have seen 30 recursive programs already, I know I need to practice more to get familiar with it. Just want to know how the thinking process is when you design a recursive program and how you understand a recursive program quickly.
  Many many thanks!!</p>