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)数据的结构形式是按递归定义的。


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


递归的缺点:


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


目录
相关文章
|
6月前
|
Java API
File类与递归
java中的File类与递归
LeetCode contest 190 5418. 二叉树中的伪回文路径 Pseudo-Palindromic Paths in a Binary Tree
LeetCode contest 190 5418. 二叉树中的伪回文路径 Pseudo-Palindromic Paths in a Binary Tree
【J2SE快速进阶】——递归算法
递归,百度百科对其定义为:程序调用自身的编程技巧。说白了就是一个函数或者过程在执行时会调用自身。
【J2SE快速进阶】——递归算法
|
Java 关系型数据库 数据库连接
|
算法 Java 数据安全/隐私保护