我不是编程的新手,我已经编程了近三年了。但我仍然对理解和设计递归程序感到沮丧。有时我需要写下整个过程,这需要花费很多时间。 说这个程序: 将排序数组转换为平衡二进制搜索树
TreeNode* sortedArrayToBST(vector<int>& nums) {
return help(nums, 0, nums.size()-1);
}
TreeNode* help(vector<int> &nums, int start, int end){
int size=end-start;
if(size<0) return NULL;
if(size==0) return new TreeNode(nums[start]);
int mid=(start+end)/2;
TreeNode* root=new TreeNode(nums[mid]);
root->left=help(nums, start, mid-1);
root->right=help(nums, mid+1, end);
return root;
}
我很难跟踪树的形成方式......我绝对不能自己设计这样的程序。我已经看过30个递归程序,我知道我需要多练习才能熟悉它。想要了解设计递归程序时的思维过程以及如何快速理解递归程序。 非常感谢!!
答案 0 :(得分:3)
当你处理递归时,你需要牢记四件事:
在你提到的情况下。
只要你清楚这4点,大多数递归问题就变得简单了。如果你想要更好地完成它,你需要练习更多涉及递归的问题。