1 递归简论

需求:求出f(x)=2f(x-1)+x²的值。满足f(0)=0

public class Recursion {
// 需求: 求出f(x)=2f(x-1)+x²的值。满足f(0)=0
public static void main(String[] args) {
int f = f(1);
System.out.println(f);
}
public static int f(int x){
// 1 当x=1的时候f(1)=1 f(0)=0 f(2)=2f(1)+4=6
if(x==0)
return x;
return 2*f(x-1)+x*x;
}
}

像上面的情况来说。我们知道f(0)=0;如果不知道这个情况,那么程序将不会计算出来。这种情况称之为基准情况,也就是说不需要经过递归而直接就可以计算出来。这就是基准情况。 
接着我们再来看一个情况:如下代码所示。

public static int bad(int n){
if(n==0)
return 0;
return bad(n/3+1)+n-1;
}
Exception in thread “main” java.lang.StackOverflowError
at com.gosaint.firstChapter.Introduction.Recursion.bad(Recursion.java:25)
at com.gosaint.firstChapter.Introduction.Recursion.bad(Recursion.java:25)
at com.gosaint.firstChapter.Introduction.Recursion.bad(Recursion.java:25)

程序出现了栈溢出。这是因为没有基准情况的。当n=1,此时bad(1)。但是bad(1)的值不知道,因此无法继续递归下去。也就是说,递归必须要满足的条件: 
a 必须存在基准情况 
b 能够持续不断的进行单方向的循环

需求:计算 一个数N中的二进制中1的个数: 
计算说明: 
1 对于一个数,首先将其转换为二进制,对于其中1或者0的个数分别可以如下的计算: 
n&(n-1):其中计算1的个数 
n|(n+1):其中计算出0的个数 
详细的解释下:如9的二进制是:1001。其中的1的个数为2。9&8的结果是1000。消除了右边的1。继续循环消除。从而得到1的个数。 
2 对于一个奇数而言,其中二进制中1的个数为n/2的数中二进制的个数加1 
递归的方式计算一个数中二进制中1的个数

public static int binarySystem(int N){
if(N%2!=0){
return binarySystem(N/2)+1;
}else {
// 如果N为偶数,二进制中1的个数计算如下:
int n;
for ( n=0;N>0;n++){
N&=(N-1);
}
return n;
}
}

直接进行计算,不适用递归的方式

/**
* 由于n&(n-1)的这种方式可以直接计算,因此可以不用使用递归的方式操作
* @param N
* @return
*/
public static int binarySystem02(int N) {
int n;
for (n = 0; N > 0; n++) {
N &= (N - 1);
}
return n;
}

java数据结构读书笔记--引论的更多相关文章

  1. java effective 读书笔记

    java effective 读书笔记 []创建和销毁对象 静态工厂方法 就是“封装了底层 暴露出一个访问接口 ” 门面模式 多参数时 用构建器,就是用个内部类 再让内部类提供构造好的对象 枚举 si ...

  2. 深入理解Java虚拟机 -- 读书笔记(1):JVM运行时数据区域

    深入理解Java虚拟机 -- 读书笔记:JVM运行时数据区域 本文转载:http://blog.csdn.net/jubincn/article/details/8607790 本系列为<深入理 ...

  3. Java并发读书笔记:线程安全与互斥同步

    目录 导致线程不安全的原因 什么是线程安全 不可变 绝对线程安全 相对线程安全 线程兼容 线程对立 互斥同步实现线程安全 synchronized内置锁 锁即对象 是否要释放锁 实现原理 啥是重进入? ...

  4. 单元测试之道Java版——读书笔记

    单元测试知道Java版读书笔记 首先我们必须要知道我们所写的代码,它的功能是什么,如果我们不了解代码的行为,那么也就无从测试. 我们测试的目的,是为了我们整个程序架构的稳定,代码其实就是欧文要实现功能 ...

  5. 【Java数据结构学习笔记之二】Java数据结构与算法之栈(Stack)实现

      本篇是java数据结构与算法的第2篇,从本篇开始我们将来了解栈的设计与实现,以下是本篇的相关知识点: 栈的抽象数据类型 顺序栈的设计与实现 链式栈的设计与实现 栈的应用 栈的抽象数据类型   栈是 ...

  6. 《Effective Java》读书笔记(一)之创建和销毁对象

    最近在研读<Effective Java>一书,读书不做点笔记,感觉很容易就忘掉,于是用本篇博客来记录阅读此书的笔记. 郑重声明: 由于是<Effective Java>一书的 ...

  7. 《Effective Java》读书笔记 - 11.序列化

    Chapter 11 Serialization Item 74: Implement Serializable judiciously 让一个类的实例可以被序列化不仅仅是在类的声明中加上" ...

  8. 《Effective java》-----读书笔记

    2015年进步很小,看的书也不是很多,感觉自己都要废了,2016是沉淀的一年,在这一年中要不断学习.看书,努力提升自己!预计在2016年要看12本书,主要涉及java基础.Spring研究.java并 ...

  9. java数据结构_笔记(4)_图

    图一.概念.图: 是一种复杂的非线性数据结构.图的二元组定义: 图 G 由两个集合 V 和 E 组成,记为:G=(V, E)  其中: V 是顶点的有穷非空集合,E 是 V 中顶点偶对(称为边)的有穷 ...

随机推荐

  1. sql语句查看库里有没有这张表,有就删除

    查看库里有没有这张表,有就删除 DROP TABLE IF EXISTS 表名

  2. [原创]java WEB学习笔记27:深入理解面向接口编程

    本博客为原创:综合 尚硅谷(http://www.atguigu.com)的系统教程(深表感谢)和 网络上的现有资源(博客,文档,图书等),资源的出处我会标明 本博客的目的:①总结自己的学习过程,相当 ...

  3. a标签包着img事件 ie下 a标签的click事件失效

    整个大的背景框有个点击事件, 如果标签结构是(详细的css样式略) a{background:green;} <a href=""> <img src=" ...

  4. 纯CSS3实现关闭按钮

    在线演示 本地下载

  5. Future模式实例

    Future模式 /** * qccr.com Inc. * Copyright (c) 2014-2016 All Rights Reserved. */ package com.youqianhu ...

  6. django实现用户注册、登录、退出

    视图 from django.contrib import auth from django.contrib.auth.models import User from django.views.dec ...

  7. 分享知识-快乐自己:solr 伪集群搭建

    前言:在你搭建集群之前先去搭建一个单机版的 跳转 Solr 集群构建图: 1):部署(4个)Tomcat 下载 更改每一个 tomcat 启动端口号: [root@VMSolr tomcat_clus ...

  8. C++(三)— 二维容器

    1.二维bool向量 vector<vector<bool>> dp(len, vector<bool>(len, false));

  9. Hibernate学习---第十五节:hibernate二级缓存

    1.二级缓存所需要的 jar 包 这三个 jar 包实在 hibernate 解压缩文件夹的 lib\optional\ehcache 目录下 2.配置 ehcache.xml <ehcache ...

  10. Atom插件及使用

    Atom比较好用的编辑工具之一,之前用过 HBuilder 和 Sublime Text ,个人感觉HBuider适合初级人们的人用. Atom好处之一是他的packages管理安装非常方便,你也可以 ...