`
gogole_09
  • 浏览: 205565 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

Java 算法基础 -递归

阅读更多

       递归对于算法来说算是基础的知识了, 最近在看<数据结构与算法分析 java语言描述> ,遇到相关递归的知识, 故在网络中找点资料,现记录下来. 如有侵权,请告知.

 

/**
	 * 阶乘的例子。其实递归递归,从字面上解释就是在方法本身调用自己的方法,或者间接调用;看上面的程序,拿multiply(5)来说:
	 *  n=5;执行 5*multiply(4); 
	 *-------------------- 
	 *这时候看multiply(4) 
      n=4 执行 4*multiply(3); 
      ------------------- 
      看multiply(3) 
      n=3,执行 3*multiply(2); 
      --------------- 
	  mulitply(2); 
	  n=2 执行 2*mulitply(1); 
	  这时候,return 1;往上返回 
	  2*1向上返回 
	  3*(2*1)向上返回 
	  4*(3*(2*1)) 向上返回 
	  5*(4*(3*(2*1)) ) = 120 
	所以程序输出120; S
	这事简单的递归的例子;所以可以看出来递归的关键得有递归出口(本体的If语句),还有递归方法
	 * @param n
	 * @return
	 */
	public static int multiply(int n){
		if(n==1||n==0){
			return n;
		}else{
			return n*(multiply(n-1));
		}
	}
	
	
	/**
	 * 计算二进制中1的个数,
	 * N为奇数,其1的个数等于N/2二进制中表示1的个数加1
	 * 例子:
	 * num=13
	 * 1.getBinary(13/2=6)+1;   调用 getBinary(6/2=3)+1 返回2+1 =3
	 * 2.getBinary(6/2=3); 进入方法 , 调用 getBinary(1)+1 =2;
	 * 3.getBinary(1)+1;  getBinary(1) 返回1 , getBinary(1)+1  实际返回2
	 *  从     步骤3返回 1+1;
	 *  再返回到步骤2 ,没有做运算
	 *  再返回到步骤1 
	 * @param num
	 * @return
	 */
	public static int getBinary(int num){
		if(num==1)
			return 1;
		if(0==num%2){//是否为偶数
			return getBinary(num/2);
		}else{
			return getBinary(num/2)+1;
		}
	}
	
	/**
	 * 利用位移来解决  n>>1 右移一位,相当与 n/2
	 * @param n
	 * @return
	 */
	public static int getBinary2(int n){
		if(n==0){
			return n;
		}
		//为偶数 
		if(n%2==0){
			return getBinary2(n>>1);
		}else{
			//若N是奇数...等于N/2的二进制中1的个数加1
			return getBinary2(n>>1)+1;
		}
	}

 

分享到:
评论

相关推荐

    Java 算法设计-递归二叉树的序列打印练习题

    二叉树

    算法-基础算法- 递归算法(包含源程序).rar

    本资源"算法-基础算法- 递归算法(包含源程序).rar"可能包含一个PDF文档,详尽地解释了递归算法的基本原理和实践应用,并可能提供了一些源代码示例,以便读者更好地理解和学习。 递归算法的核心在于两个主要组成...

    java培训知识-递归

    1. **函数内部调用自身**:这是递归的基础,即函数在执行过程中调用自身,形成一个调用链。 2. **边界条件**:递归必须有一个明确的终止条件,也叫递归出口,当这个条件满足时,递归调用停止,防止无限循环。 3. *...

    [Java算法设计]-递归阶乘.java

    该资源提供了Java中递归阶乘的全面指南。文档中涵盖了递归阶乘的基本概念,包括如何使用递归计算阶乘以及如何在Java中实现递归阶乘。...我们相信,该资源将成为想提高算法设计技能的Java程序员的宝贵参考资料。

    JAVA算法分析-很好的java思想

    本文将深入探讨“JAVA算法分析”,旨在帮助读者从深层次理解Java语言,并结合算法思想提升编程能力。 首先,Java语言为实现高效算法提供了良好的支持。其面向对象的特性使得代码更易于组织和复用,接口、抽象类和...

    Java 算法设计-非递归二叉树的序列打印练习题

    二叉树

    qingq0825#Javabook-Interview#算法-二叉树-递归-二叉树反转1

    原二叉树:反转后的二叉树:TreeNode temp = root.left;欢迎光临我的博客,发现更多技术资源~

    java算法 0-1 背包问题回溯算法解决 netbeans

    2. 回溯函数:这是核心算法,它通过递归的方式尝试所有可能的物品选择组合,每次递归时检查当前选择的物品总重量是否超出背包容量,如果超出则回溯到上一步,否则继续尝试下一个物品。 3. 构建解空间树:在回溯过程...

    Java实现排序和递归算法示例

    自己写的4个Java代码,内有详细注释,适合想学... insertion_sort.java --插入排序 Divide.java --分治排序 HanoiCompute.java --递归实现汉诺塔 FileCtrl.java --递归实现显示目录下的所有文件和文件夹

    java递归算法

    java递归算法,java递归算法,java递归算法

    【IT十八掌徐培成】Java基础第03天-02.函数定义-调用-sum-fac-递归.zip

    函数定义-调用-sum-fac-递归”将深入探讨Java中的函数定义、调用以及递归算法的应用。函数在程序设计中是代码复用和模块化的核心,而递归则是解决复杂问题的一种强大思维模式。 首先,我们来看函数定义。在Java中,...

    Java二分查找递归算法

    Java二分查找递归算法

    5!递归算法和非递归算法

    递归算法和非递归算法 在计算机科学与编程领域中,递归算法与非递归算法是两种非常重要的计算方法。本文将详细介绍这两种算法的特点、应用场景以及如何实现它们,特别针对初学者及面试准备者。 #### 递归算法 ...

    java编写的递归算法的经典事例

    ### Java编写的递归算法的经典事例:全排列输出 #### 概述 本文将详细介绍一个用Java编写的递归算法实例,该实例用于实现字符数组的所有可能全排列。通过这个例子,我们可以深入理解递归的基本概念、工作原理以及...

    LUT算法与数据结构课程设计---递归替换和二叉排列树

    源码部分可能包括了这些算法的实现,例如使用递归函数进行字符串处理,以及用C++或Java等语言实现二叉排列树的数据结构。文档部分则可能涵盖了这些概念的理论介绍、算法分析以及实现细节。 为了进一步提升对这两个...

    java算法基础题

    根据提供的文件信息,我们可以从中提炼出以下几个重要的Java算法知识点: ### 1. 斐波那契数列(Fibonacci Sequence) #### 知识点详解: 斐波那契数列是一个非常经典的数学概念,在计算机科学中也有广泛的应用。...

    Java递归算法构造JSON树形结构

    Java 递归算法构造 JSON 树形结构 Java 递归算法构造 JSON 树形结构是指通过 Java 语言使用递归算法将数据库中的菜单表构建成树形的 JSON 格式发送给第三方。这种方法可以将复杂的树形结构数据转换成易于理解和处理...

    Java递归算法(PPT+PDF+Word)

    "Java递归算法.pdf"可能详细介绍了递归的理论基础,包括递归的时间复杂度和空间复杂度分析。递归可能导致较大的栈空间消耗,因此在设计递归算法时需要考虑效率问题,避免栈溢出。对于时间复杂度,如果每次递归调用都...

    算法导论-java

    9. **搜索算法**:深度优先搜索(DFS)和广度优先搜索(BFS)是图和树遍历的基础,Java中的Stack和Queue可以用来辅助实现。 10. **递归与分治**:递归是算法导论中的重要主题,如二分查找、斐波那契数列等。Java中...

    java数据结构递归算法

    在这个"java数据结构递归算法"主题中,我们将深入探讨递归的基本概念、如何在Java中使用递归,以及一个著名的递归应用案例——八皇后问题。 递归是函数或方法调用自身的过程。它基于一个问题的规模缩小至基本情况,...

Global site tag (gtag.js) - Google Analytics