「java栈递归」java递归的写法

博主:adminadmin 2023-03-18 14:48:07 414

今天给各位分享java栈递归的知识,其中也会对java递归的写法进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!

本文目录一览:

java堆栈溢出-递归

程序逻辑中永远跳不出递归调用,因为在test中所有逻辑分支中都是往下递归调用,没有终止的逻辑步骤。和方法自己调用自己没有区别。

需要在某个逻辑分支中返回(终止递归)。

在JAVA中什么是递归?有什么用?

Java方法递归是指在一个方法的内部调用自身的过程,以此类推就是java方法递归的理解思想,具体来讲就是把规模大的问题转化为规模小的相似的子问题来解决。在函数实现时,因为解决大问题的方法和解决小问题的方法往往是同一个方法,所以就产生了函数调用它自身的情况。另外这个解决问题的函数必须有明显的结束条件,这样就不会产生无限递归的情况了。因此,java方法递归的两个条件就是,一通过递归调用来缩小问题规模,且新问题与原问题有着相同的形式;二存在一种简单情境,可以使递归在简单情境下退出。

谁能说说JAVA的递归是什么意思?

一、含义

程序调用自身的编程技巧称为递归( recursion)。递归做为一种算法在程序设计语言中广泛应用。 一个过程或函数在其定义或说明中有直接或间接调用自身的一种方法,它通常把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解,递归策略只需少量的程序就可描述出解题过程所需要的多次重复计算,大大地减少了程序的代码量。递归的能力在于用有限的语句来定义对象的无限集合。

二、递归算法解决问题的特点:

【1】递归就是方法里调用自身。

【2】在使用递归策略时,必须有一个明确的递归结束条件,称为递归出口。

【3】递归算法代码显得很简洁,但递归算法解题的运行效率较低。所以不提倡用递归设计程序。

【4】在递归调用的过程中系统为每一层的返回点、局部量等开辟了栈来存储。递归次数过多容易造成栈溢出等,所以一般不提倡用递归算法设计程序。

【5】在做递归算法的时候,一定把握出口,也就是做递归算法必须要有一个明确的递归结束条件。这一点是非常重要的。其实这个出口就是一个条件,当满足了这个条件的时候我们就不再递归了。

三、示例程序:

使用Java代码求5的阶乘。(5的阶乘=5*4*3*2*1)

[java] view plain copy

package org.wxp.recursion;

/**

* 计算5的阶乘(result = 5*4*3*2*1)

* @author Champion.Wong

*

*

*/

public class Test01 {

public static void main(String[] args) {

System.out.println(f(5));

}

public static int f(int n) {

if (1 == n)

return 1;

else

return n*f(n-1);

}

}

此题中,按照递归的三个条件来分析:

(1)边界条件:阶乘,乘到最后一个数,即1的时候,返回1,程序执行到底;

(2)递归前进段:当前的参数不等于1的时候,继续调用自身;

(3)递归返回段:从最大的数开始乘,如果当前参数是5,那么就是5*4,即5*(5-1),即n*(n-1)

java 递归和内存的堆栈

基本数据类型就是在栈里面开辟一块空间,把里面的值存进去。例如 : int i = 9; 就是开辟一块内存,那块内存的名字叫i,里面的值存放的9; 引用数据类型也是在栈开辟一块空间,当new 对象的时候就会在堆里面开辟一块空间,存储这个对象的所有信息,然后栈的那块空间里面的值就会变成一系列内存地址,可以指向堆里面的那块内存。 例如: Date date; 这个就是在栈里面开辟了块内存,名字叫date,然后它里面的值为null; date = new Date(); 然后这个就是在堆开辟了块内存,把所有信息都放进去了,然后栈内存的date里面的值就会变成指向堆内存的地址。 所以你调用date的时候就相当是在调用堆里面的数据.

java中递归算法是什么怎么算的?

一、递归算法基本思路:

Java递归算法是基于Java语言实现的递归算法。递归算法是一种直接或者间接调用自身函数或者方法的算法。递归算法实质是把问题分解成规模缩小的同类问题的子问题,然后递归调用方法表示问题的解。递归往往能给我们带来非常简洁非常直观的代码形式,从而使我们的编码大大简化,然而递归的思维确实跟我们的常规思维相逆的,通常都是从上而下的思维问题,而递归趋势从下往上的进行思维。

二、递归算法解决问题的特点:

【1】递归就是方法里调用自身。

【2】在使用递归策略时,必须有一个明确的递归结束条件,称为递归出口。

【3】递归算法代码显得很简洁,但递归算法解题的运行效率较低。所以不提倡用递归设计程序。

【4】在递归调用的过程中系统为每一层的返回点、局部量等开辟了栈来存储。递归次数过多容易造成栈溢出等,所以一般不提倡用递归算法设计程序。

【5】在做递归算法的时候,一定把握出口,也就是做递归算法必须要有一个明确的递归结束条件。这一点是非常重要的。其实这个出口就是一个条件,当满足了这个条件的时候我们就不再递归了。

三、代码示例:

public class Factorial {

    //this is a recursive function

    int fact(int n){

        if (n==1) return 1;

        return fact(n-1)*n;

    }

     

}

     public class TestFactorial {

 

    public static void main(String[] args) {

        // TODO Auto-generated method stub

        Factorial factorial=new Factorial();

        System.out.println("factorial(5)="+factorial.fact(5));

    }

}

代码执行流程图如下:

此程序中n=5就是程序的出口。

java栈递归的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于java递归的写法、java栈递归的信息别忘了在本站进行查找喔。