递归

写递归函数经常出错,提醒自己两个规则:

1. 一般来说递归函数中不应该出现for、while之类的循环语句, 因为递归就是循环的另外一种实现;

2. 注意基线条件,具体参考《算法图解》p32。

一个死循环的递归:

    void recurCreate(TreeNode* p, vector<int>& vec, int l, int r){
while (l<r) {
int m = l+(r-l)/;
p = new TreeNode(vec[m]);
recurCreate(p->left, vec, l, m);
recurCreate(p->right, vec, m+, r);
}
}

正确的写法:

    void recurCreate(TreeNode* p, vector<int>& vec, int l, int r){
if (l>=r) return;
else {
int m = l+(r-l)/;
p = new TreeNode(vec[m]);
recurCreate(p->left, vec, l, m);
recurCreate(p->right, vec, m+, r);
}
}

指针初始化

TreeNode* sortedArrayToBST(vector<int> &nums) {
if(nums.size()==) return nullptr;
TreeNode* root = new TreeNode(); //新建一个树节点,同时在内存中分配一个地址给它,root指向该地址
TreeNode* root1; //root1指向八荒之外的某个地址(未初始化局部变量,应避免此操作)
root1->val = ;
TreeNode* root2 = nullptr; //root2是个空指针,没有指向哪里
root1->val = ; //空指针是没有内容的,因此这里调用nullptr->val是错的 错的 错的
recurCreate(root, nums, , static_cast<int>(nums.size()) ); //递归建立BST,返回root地址
recurCreate(root1, nums, , static_cast<int>(nums.size()) ); //root1里啥也没有
recurCreate(root1, nums, , static_cast<int>(nums.size()) );
return root;
}

未初始化变量的问题参考:C/C++中已初始化/未初始化全局/静态/局部变量/常量在内存中的位置

备注:

本是毫不相关的两个问题,刚好在同一道题里遇到了,leetcode108,完整代码如下:

class Solution {
public:
void recurCreate(TreeNode* p, vector<int>& vec, int l, int r){
if (l>=r) {
return;
}
else {
int m = l+(r-l)/;
p->val = vec[m];
if(l<m){
p->left = new TreeNode();
recurCreate(p->left, vec, l, m);
}
if(m+<r){
p->right = new TreeNode();
recurCreate(p->right, vec, m+, r);
}
}
}
TreeNode* sortedArrayToBST(vector<int> &nums) {
if(nums.size()==) return nullptr;
TreeNode* root = new TreeNode();
recurCreate(root, nums, , static_cast<int>(nums.size()) );
return root;
}
};

c++算法实现(一) - 递归和初始化的更多相关文章

  1. 算法基础_递归_求杨辉三角第m行第n个数字

    问题描述: 算法基础_递归_求杨辉三角第m行第n个数字(m,n都从0开始) 解题源代码(这里打印出的是杨辉三角某一层的所有数字,没用大数,所以有上限,这里只写基本逻辑,要符合题意的话,把循环去掉就好) ...

  2. Java实现 蓝桥杯VIP 算法训练 非递归(暴力)

    试题 算法训练 非递归 问题描述 当x>1时,Hermite多项式的定义见第二版教材125页.用户输入x和n,试编写"非递归"函数,输出对应的Hermite多项式的值.其中x ...

  3. C#算法基础之递归排序

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...

  4. 汉诺塔(河内塔)算法 ----C语言递归实现

    汉诺塔:汉诺塔(又称河内塔)问题是源于印度一个古老传说的益智玩具.大梵天创造世界的时候做了三根金刚石柱子, 在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘.大梵天命令婆罗门把圆盘从下面开始按大小顺 ...

  5. 算法打基础——符号&递归解法

    第二节 算法复杂度分析的的基本符号及 递归关系式下的复杂度解法 这次的主要知识点是: 1.各种复杂度符号  2.递归复杂度解法: 分为三种 替换法(猜!)   递归树法    主定理 1各种复杂度符号 ...

  6. 算法笔记_017:递归执行顺序的探讨(Java)

    目录 1 问题描述 2 解决方案 2.1 问题化简 2.2 定位输出测试 2.3 回顾总结 1 问题描述 最近两天在思考如何使用蛮力法解决旅行商问题(此问题,说白了就是如何求解n个不同字母的所有不同排 ...

  7. 【PyQt】算法-插入、递归、冒泡

    # coding=utf-8 import sys from PyQt4.QtGui import * from PyQt4.QtCore import * class MainWindow(QMai ...

  8. [图解算法] 归并排序MergeSort——<递归与分治策略>

    #include"iostream.h" void Merge(int c[],int d[],int l,int m,int r){ ,k=l; while((i<=m)& ...

  9. python 下的数据结构与算法---5:递归(Recursion)

    定义:递归就是不断分割整体成部分直到可以轻易解决分割出来的部分. 递归表达式三定律: 1:递归表达式必须有个最小单元     (最小单元既是停止递归调用以及能够直接运算的) 2:递归表达式在运算过程中 ...

随机推荐

  1. VS2008中 VB 报错 检索 COM 类工厂中 CLSID 为 {28E68F9A-8D75-11D1-8DC3-3C302A000000} 的组件失败,原因是出现以下错误: 80040154 没有注册类 (异常来自 HRESULT:0x80040154 (REGDB_E_CLASSNOTREG))。

    Resvr32 .net中引用控件的名称 如果注册成功,问题不在出现 但是如果是在x64位的系统中,即使控件注册成功,错误依照提示,是因为大多数第三方写的COM控件,只支持32位的系统, 在VS中找到 ...

  2. MySQL错误码

    MySQL运行异常时,查看服务日志可看到error number,该错误码为系统调用出错码,具体如下. errno.00 is: Success    成功 errno.01 is: Operatio ...

  3. php的imagick模块扩展

    imagick模块介绍       ImageMagick是一个用于查看.编辑位图文件以及进行图像格式转换的开放源代码软件套装.它可以读取.编辑超过100种图象格式,可用来替换GD库. 安装 在加载模 ...

  4. React组件传值

    React的单向数据流与组件间的沟通. 首先,我认为使用React的最大好处在于:功能组件化,遵守前端可维护的原则. 先介绍单向数据流吧. React单向数据流: React是单向数据流,数据主要从父 ...

  5. 阿里云 ACP 考试学习过程分享

    目录 考证意义 学习方法 ACP 报名 学习安排[重要] 考试当天 其他 经验贴 考证意义 证多不压身,证比项目经历更具有说服力,证是行业的标准认证.更多时候,是有证的人说,"证其实不重要& ...

  6. VSCode打开多个项目文件夹的解决方法

    最近从sublime转vscode,自然而然就会把sublime的一些习惯带过来,其中有一点让人头疼的是: 当把一个文件夹拖进vscode里面的时候,会把原来的文件夹覆盖掉,这就意味着不能同时在vsc ...

  7. VUE组件间数据方法的传递,初步了解

    父组件的数据传递到子组件: 子组件:(其中fMsg是要从父组件传递过来的数据,注意fMsg要在子组件props里先定义) 父组件:(使用v-bind,将自身数据绑定给中转属性fMsg,从而通过 子组件 ...

  8. jmeter 之系统参数根据条件修改

    背景:在setup 线程组定义了一个全局变量a:${__setProperty(a,2,)},线程组里有两个线程通过判断a的值来决定是否执行sample,线程组的最后通过beanshell sampl ...

  9. Elasticsearch学习笔记(八)Elasticsearch的乐观锁并发控制

    一.基于_version的乐观锁并发控制                 语法:PUT /test_index/test_type/id?version=xxx             更新时带上数据 ...

  10. springcloud第二步:发布服务提供者

    创建项目service-member Maven依赖 <parent> <groupId>org.springframework.boot</groupId> &l ...