Java方法06:递归讲解

A 方法调用 A 方法,很容易理解,递归就是:A 方法调用 A 方法,就是自己调用自己

# 利用递归可以用简单的程序来解决一些复杂的问题,它通常把一个大型的复杂的问题层层转换为一个与原问题相似的规模较小的问题来求解,递归策略只需少量的程序就可以描述出解题过程所需要的多次重复计算,大大减少了程序的代码量。递归的能力在于用有限的语句来定义对象的无限集合

递归结构包括两个部分

# 递归头:什么时候不调用自身的方法。如果没有头,将陷入死循环

# 递归体:什么时候需要调用自身的方法

package method;

public class Demo04 {
    public static void main(String[] args) {
        System.out.println(f(5));
        //输出结果为120
    }
    //下面用阶乘演示递归
    //1!=1,2!=2,3!=6...
    public static int f (int n) {
        if (n==1) {
            return 1;
        } else {
            return n * f(n -1);
        }
    }
}

 

栈机制

 递归通过数学公式可以很方便的转换成程序,容易理解和编程,但是 Java 都是使用栈机制

        栈机制:就相当于有一个罐子,它会一层一层的往里面放东西,最底下的一层就是 main 方法每调用一个方法就会在上面放一层,如果这个方法结束了它就消失了,main 方法执行完了,栈里面就空了,就不跑程序了,但要是无限的在里面放东西,这个就不行了,对于一些嵌套层次比较深的算法,递归就会显得力不从心了,在这个物理上就会造成咱们的内存崩溃,所以递归会带来大量的函数调,会产生很多额外的一些时间开销,在深度比较大的时候,如果这里写个 f(100),f(1000) 电脑很容易崩,程序报错,所以平常能不用递归就不用递归,递归都可以用一些方法代替,但是一些方法通过递归来解决比较快的前提是它的基数比较小的情况下,大计算就换一些其他的方法

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值