`
xiang588
  • 浏览: 316362 次
  • 性别: Icon_minigender_1
  • 来自: 甘肃平凉
社区版块
存档分类
最新评论

java中的递归调用

阅读更多
 
java中的递归调用
 
递归函数的定义:
答:递归函数即自调用函数,在函数体内直接或间接的调用自己,即函数的嵌套是函数本身。
2、递归方式:递归调用有直接递归和间接递归两种方式。
A:直接递归:在函数中出现调用函数本身。
示例1:下面代码求斐波那契数列第n项,斐波那契数列第一和第二项是1,后面每一项是前两项之和,即1、1、2、3、5、8、13 ...。
程序代码:
public class Test {
public static void main(String args[]) {
int x1 = 1;
int sum = 0;
int n = 7;
 
for (int i = 1; i <= n; i++) {
x1 = func(i);
sum = sum + x1;
}
System.out.println("sum=" + sum);
}
 
public static int func(int x) {
if (x > 2)
return (func(x - 1) + func(x - 2));
else
return 1;
}
}
 
B:间接递归:指函数中调用了其他函数,而该其他函数有调用了本函数。
示例2:用间接递归来计算上述斐波那契数列。
程序代码:
public class Test {
public static void main(String args[]) {
int x1 = 1;
int sum = 0;
int n = 7;
 
for (int i = 1; i <= n; i++) {
x1 = func1(i);
sum = sum + x1;
}
System.out.println("sum=" + sum);
}
public static int func1(int a){
int b;
b=func2(a);
return b;
}
 
public static int func2(int b) {
if (b> 2)
return (func1(b - 1) + func1(b - 2));
else
return 1;
}
}
3、为什么要用递归函数?递归函数的缺点是什么?
答:递归的目的是简化程序设计,使程序易读。
示例3:下面不用递归函数继续来计算上述斐波那契数列。
程序代码:
public class Test {
public static void main(String args[]) {
int n=7;
int a=1, b=1, temp;
int sum=2;
 
for(int i=3; i<=n; i++){
temp=a+b; a=b; b=temp;
sum=sum+temp;
}
System.out.println("sum=" + sum);
}
}
从上面例子我们可以发现虽然非递归函数效率高,但较难编程,可读性较差。递归函数的缺点是增加了系统开销,也就是说,每递归一次,栈内存就多占用一截。
 
4、递归的条件:
答:需有完成任务的语句,需满足递归的要求(减小而不是发散)。
5、递归进阶:
示例4:
编程求解:若一头小母牛,从出生起第四个年头开始每年生一头母牛,按次规律,第n年时有多少头母牛?
 
程序代码:
public class Test3 {
public static void main(String args[]) {
int n=10; //要查看的年数
System.out.println("共有"+cattle(n)+"头小母牛!");
}
public static int cattle(int n){
if(n<=0)
return 0;
if(n<=3)
return 1;
return cattle(n-1)+ cattle(n-3);//此处是递归要好好理解。
}
}
 
规律:此类问题的递归函数为:
如果要求的是从出生起第四个年头,则递归函数为cattle(n-1)+ cattle(n-3),
如果要求的是从出生起第五个年头,则递归函数为cattle(n-1)+ cattle(n-4),
。。。。
依次类推。
分享到:
评论

相关推荐

    java实现递归调用

    本篇文章将详细介绍如何使用Java实现递归调用来遍历一棵树,并结合SQL代码进行说明。 首先,我们需要理解树的基本概念。树是一种非线性的数据结构,由节点(或称为顶点)和边组成。每个节点可以有零个或多个子节点...

    Java中递归逻辑循环调用解压zip里面所有的压缩包

    Java中递归逻辑循环调用解压zip里面所有的压缩包 Java中递归逻辑循环调用解压zip里面所有的压缩包

    Java方法递归调用实例解析

    Java方法递归调用实例解析是Java编程中的一种重要概念,指的是一个方法可以调用自身,以解决问题。递归调用可以用于解决一些复杂的问题,但是需要注意递归的使用,因为递归可能会导致栈内存溢出错误。 什么是递归?...

    java利用递归调用实现树形菜单的样式

    在 Java 中,递归调用可以用来实现树形菜单的样式,例如,获取帖子的所有评论,包括主评论和子评论。 知识点一:递归的定义 递归是指程序调用自身的编程技巧。程序调用自身的编程技巧称为递归(recursion)。递归...

    java 用递归实现字符串反转

    - **递归步骤**:如果字符串长度大于等于2,则通过递归调用 `reverseString(x.substring(1, x.length()))` 来反转除第一个字符外的所有字符,并将第一个字符添加到递归调用的结果末尾。 #### 四、递归过程详解 ...

    递归调用最容易理解的课件

    通过以上内容的学习,我们了解了方法重载的概念及其在Java中的应用,以及递归调用的基本原理和实现技巧。方法的重载使得我们可以为同一类中的多个方法赋予相同的名字,而递归调用则为我们提供了一种处理复杂问题的...

    算法进阶 01 递归调用 打表

    在实际编程中,Python、Java、C++等语言都支持递归调用,并且可以结合打表的方法优化算法性能。例如,Python 中的字典操作非常高效,适合用于动态规划中的打表。 总之,递归调用是解决复杂问题的有效工具,但需要...

    用Java集合递归实现通用树Tree

    // 递归调用 } } } ``` 此方法首先检查当前节点是否为空,如果不为空,则打印节点数据,并递归地遍历所有子节点。 此外,递归也可以用于搜索树中的特定节点、查找最大值或最小值、计算树的高度等操作。这些操作...

    java递归无限层级树

    例如,如果一个节点在某个条件下应有子节点,我们就在其`children`集合中添加新的`TreeNode`对象,并递归调用同一个方法,将层级加一。 ```java public void generateTree(TreeNode parent, int level) { if (满足...

    基于JavaParser的代码调用链分析,可以用于分析Java代码的方法调用链.zip

    这种链可以帮助我们理解代码的执行流程,找出潜在的问题,例如循环引用、递归调用或者过深的调用层次可能导致的性能问题。 基于JavaParser进行方法调用链分析的基本步骤如下: 1. **读取源代码**:使用JavaParser...

    java 中的经典递归

    1. **基本情况**(Base Case):递归调用必须有一个明确的停止条件,即递归的出口。这通常是问题规模最小的情况。 2. **递归情况**(Recursive Case):递归调用本身,即将问题分解成更小的子问题进行求解。 #### ...

    java 递归问题文档

    1. **堆栈溢出**:由于每次函数调用都会在内存堆栈中分配空间,过多的递归调用可能导致堆栈溢出错误。因此,确保递归深度在合理范围内是很重要的。 2. **效率**:递归虽然简洁,但相比迭代,其效率通常较低,因为...

    分页+递归显示分页+递归显示

    在IT领域,分页和递归是两种常见的数据处理技术,尤其在大数据量的Web应用中,它们扮演着至关重要的角色。"分页+递归显示分页+递归显示"这一主题涉及到如何有效地管理和展示大量层级数据。下面将详细阐述这两个概念...

    java 递归拷贝文件显示进度demo

    在Java编程中,递归拷贝文件是一种常见操作,特别是在处理目录结构时。这个"java 递归拷贝文件显示进度demo"是一个实用的示例,它不仅实现了从一个源目录到目标目录的深度拷贝,而且还提供了进度显示功能,这对于...

    java树结构递归里面详细说明

    Java树结构递归详细说明 Java树结构是Java后台常用的数据结构,通过递归写成的。树结构的用法实例包括树目录的总结、函数的参数说明、dtree.js文件的默认图片路径、页面中的书写规则、样式表的使用和页面代码书写的...

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

    在这个例子中,通过交换 `buf` 数组中的元素位置,并递归调用 `perm` 函数来处理剩余的子数组,从而逐步构建出所有可能的排列组合。 ##### 3. 具体步骤分析 1. **初始化**:首先定义一个字符数组 `buf` 和一个 `...

    java递归

    Java递归是编程中的一个重要概念,它是指在函数或方法的定义中调用自身的过程。在Java中,递归通常用于解决那些可以被简化为规模更小的相同问题的复杂问题,例如遍历数据结构(如树和图)、计算阶乘、搜索算法等。...

    递归调用学习笔记

    在这个代码片段中,`method`函数通过递归调用来计算n的阶乘。当n等于1时,函数返回1,这是递归的基本情况。对于其他情况,函数返回n乘以n减1的阶乘。每次递归调用,n都会减小1,直到达到基本情况为止。 2. 递归调用...

    Java程序设计基础:调用方法-方法的递归调用.pptx

    1. **递归基**:即递归的终止条件,是递归调用中最简单的情形,可以直接得出答案。 2. **递归体**:将问题分解为较小规模的相同问题,并继续调用自身来解决这些子问题。 #### 三、递归的应用示例 ##### 1. 求阶乘 ...

    递归下降法实现语法分析器(java)

    递归下降法是一种常用的自顶向下语法分析方法,它利用函数的递归调用来对应文法规则的结构。在Java中实现递归下降法可以创建出高效且易于理解的解析器。下面将详细探讨递归下降法的原理以及如何在Java中实现。 递归...

Global site tag (gtag.js) - Google Analytics