j2se——递归

简介: j2se——递归

1、什么是递归


 我们首先来看看关于递归的小故事:从前有座山,山里有座庙,庙里有个老和尚,正在给小和尚讲故事呢!故事是什么呢?“从前有座山,山里有座庙,庙里有个老和尚,正在给小和尚讲故事呢!故事是什么呢?‘从前有座山,山里有座庙,庙里有个老和尚,正在给小和尚讲故事呢!故事是什么呢?……’”。通过这个故事可以得出,递归就是“自己里面又有自己”。


递归,就是在运行的过程中调用自己。

构成递归需具备的条件:

1. 子问题须与原始问题为同样的事,且更为简单;
2. 不能无限制地调用本身,须有个出口,化简为非递归状况处理。

递归的能力在于用有限的语句来定义对象的无限集合。


2、递归模板


我们知道递归必须具备两个条件,一个是调用自己,一个是有终止条件。这两个条件必须同时具备,且一个都不能少。并且终止条件必须是在递归最开始的地方,也就是下面这样


public void recursion(参数0) {
    if (终止条件) {
        return;
    }
    recursion(参数1);
}


实际上递归可能调用自己不止一次,并且很多递归在调用之前或调用之后都会有一些逻辑上的处理。最终达到终止条件后才停止调用自己。


3、实例分析


5的阶乘


public class Test {
    public static void main(string arg[]) {
        System.out.println(method(5));  //输出方法为method,参数为5的结果
    }
    public static int method(int n) {  //阶乘的方法
    if(n==1)  
        return 1; //n为1时返回1
    else
        return n*method(n-1); 
    }
}


我们求f(5)的时候,只需要求出f(4)即可,如果求f(4)我们要求出f(3)……,一层一层的调用,当n=1的时候,我们直接返回1,然后再一层一层的返回,直到返回f(5)为止。如图所示:



4、总结


以下内容是在百度百科查询的内容:


递归算法一般用于解决三类问题:


(1)数据的定义是按递归定义的。(Fibonacci函数)


(2)问题解法按递归算法实现。


这类问题虽则本身没有明显的递归结构,但用递归求解比迭代求解更简单,如Hanoi问题。


(3)数据的结构形式是按递归定义的。


如二叉树、广义表等,由于结构本身固有的递归特性,则它们的操作可递归地描述。


递归的缺点:


递归算法解题相对常用的算法如普通循环等,运行效率较低。因此,应该尽量避免使用递归,除非没有更好的算法或者某种特定情况,递归更为适合的时候。在递归调用的过程当中系统为每一层的返回点、局部量等开辟了栈来存储。递归次数过多容易造成栈溢出等。


目录
相关文章
|
9月前
|
机器学习/深度学习 编译器 C语言
关于函数递归的基础
关于函数递归的基础
62 5
|
9月前
|
Java API
File类与递归
java中的File类与递归
|
Serverless
递归访问目录,嵌套函数,递归函数map函数,filter函数,reduce函数
一、递归访问目录: 且目录中嵌套目录,有层次的列出给定目录中所有的文件和文件夹
92 0
|
算法 搜索推荐 Java
【Java SE】实现冒泡排序和数组逆序
【Java SE】实现冒泡排序和数组逆序
排序Comparable 和 Comparator的区别
排序Comparable 和 Comparator的区别
130 0
Comparable和Comparator有什么区别?你知道他们和Arrays.sort的关系吗?
Comparable和Comparator有什么区别?你知道他们和Arrays.sort的关系吗?
129 0
Java集合相关学习——元素排序两大接口Comparable和Comparator的应用及区别
Java集合相关学习——元素排序两大接口Comparable和Comparator的应用及区别
Java集合相关学习——元素排序两大接口Comparable和Comparator的应用及区别