递归对于算法来说算是基础的知识了, 最近在看<数据结构与算法分析 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;
}
}
分享到:
相关推荐
二叉树
本资源"算法-基础算法- 递归算法(包含源程序).rar"可能包含一个PDF文档,详尽地解释了递归算法的基本原理和实践应用,并可能提供了一些源代码示例,以便读者更好地理解和学习。 递归算法的核心在于两个主要组成...
1. **函数内部调用自身**:这是递归的基础,即函数在执行过程中调用自身,形成一个调用链。 2. **边界条件**:递归必须有一个明确的终止条件,也叫递归出口,当这个条件满足时,递归调用停止,防止无限循环。 3. *...
该资源提供了Java中递归阶乘的全面指南。文档中涵盖了递归阶乘的基本概念,包括如何使用递归计算阶乘以及如何在Java中实现递归阶乘。...我们相信,该资源将成为想提高算法设计技能的Java程序员的宝贵参考资料。
本文将深入探讨“JAVA算法分析”,旨在帮助读者从深层次理解Java语言,并结合算法思想提升编程能力。 首先,Java语言为实现高效算法提供了良好的支持。其面向对象的特性使得代码更易于组织和复用,接口、抽象类和...
二叉树
原二叉树:反转后的二叉树:TreeNode temp = root.left;欢迎光临我的博客,发现更多技术资源~
2. 回溯函数:这是核心算法,它通过递归的方式尝试所有可能的物品选择组合,每次递归时检查当前选择的物品总重量是否超出背包容量,如果超出则回溯到上一步,否则继续尝试下一个物品。 3. 构建解空间树:在回溯过程...
自己写的4个Java代码,内有详细注释,适合想学... insertion_sort.java --插入排序 Divide.java --分治排序 HanoiCompute.java --递归实现汉诺塔 FileCtrl.java --递归实现显示目录下的所有文件和文件夹
java递归算法,java递归算法,java递归算法
函数定义-调用-sum-fac-递归”将深入探讨Java中的函数定义、调用以及递归算法的应用。函数在程序设计中是代码复用和模块化的核心,而递归则是解决复杂问题的一种强大思维模式。 首先,我们来看函数定义。在Java中,...
Java二分查找递归算法
递归算法和非递归算法 在计算机科学与编程领域中,递归算法与非递归算法是两种非常重要的计算方法。本文将详细介绍这两种算法的特点、应用场景以及如何实现它们,特别针对初学者及面试准备者。 #### 递归算法 ...
### Java编写的递归算法的经典事例:全排列输出 #### 概述 本文将详细介绍一个用Java编写的递归算法实例,该实例用于实现字符数组的所有可能全排列。通过这个例子,我们可以深入理解递归的基本概念、工作原理以及...
源码部分可能包括了这些算法的实现,例如使用递归函数进行字符串处理,以及用C++或Java等语言实现二叉排列树的数据结构。文档部分则可能涵盖了这些概念的理论介绍、算法分析以及实现细节。 为了进一步提升对这两个...
根据提供的文件信息,我们可以从中提炼出以下几个重要的Java算法知识点: ### 1. 斐波那契数列(Fibonacci Sequence) #### 知识点详解: 斐波那契数列是一个非常经典的数学概念,在计算机科学中也有广泛的应用。...
Java 递归算法构造 JSON 树形结构 Java 递归算法构造 JSON 树形结构是指通过 Java 语言使用递归算法将数据库中的菜单表构建成树形的 JSON 格式发送给第三方。这种方法可以将复杂的树形结构数据转换成易于理解和处理...
"Java递归算法.pdf"可能详细介绍了递归的理论基础,包括递归的时间复杂度和空间复杂度分析。递归可能导致较大的栈空间消耗,因此在设计递归算法时需要考虑效率问题,避免栈溢出。对于时间复杂度,如果每次递归调用都...
9. **搜索算法**:深度优先搜索(DFS)和广度优先搜索(BFS)是图和树遍历的基础,Java中的Stack和Queue可以用来辅助实现。 10. **递归与分治**:递归是算法导论中的重要主题,如二分查找、斐波那契数列等。Java中...
在这个"java数据结构递归算法"主题中,我们将深入探讨递归的基本概念、如何在Java中使用递归,以及一个著名的递归应用案例——八皇后问题。 递归是函数或方法调用自身的过程。它基于一个问题的规模缩小至基本情况,...