java递归阶乘算法递归调用

前置知识(文章后有讲解)

  • 方法定义与调用

递归

递归调用:

方法自己调用自己的现象就称为递归。

递归分类:

  • 递归分为两种,直接递归和间接递归。

  • 直接递归称为方法自身调用自己。

  • 间接递归可以A方法调用B方法,B方法调用C方法,C方法调用A方法。

注意事项:

  • 递归一定要有条件限定,保证递归能够停止下来,否则会发生栈内存溢出。

  • 在递归中虽然有限定条件,但是递归深度不能太深,否则效率低下,或者也会发生栈内存溢出。

  • 能够使用循环代替的,尽量使用循环代替递归

递归理解

一个方法调用自己时,需要先把里面的方法执行完。而里面的方法又会调用自己,故而需要一个条件使得里面的某个方法拥有返回值,从而完成最外面的方法

例子理解

求10的阶乘

最里面函数的返回值:栈内第一个弹出值

最外面的返回值:栈内最后一个弹出值

用栈理解:

前置知识(例题所涉及知识点)

方法定义与调用

方法也叫函数,是一组代码语句的封装,从而实现代码重用,从而减少冗余代码,通常它是一个独立功能的定义,方法是一个类中最基本的功能单元。

格式(【】内的内容可写可不写,按情况设置):

【修饰符】 返回值类型 方法名(【形参列表 】)【throws 异常列表】{

方法体的功能代码

}

关于方法体中return语句的说明:

  • return语句的作用是结束方法的执行,并将方法的结果返回去

  • 如果返回值类型不是void,方法体中必须保证一定有 return 返回值; 语句,并且要求该返回值结果的类型与声明的返回值类型一致或兼容。

  • 如果返回值类型为void时,方法体中可以没有return语句,如果要用return语句提前结束方法的执行,那么return后面不能跟返回值,直接写return ; 就可以。

  • return语句后面就不能再写其他代码了,否则会报错:Unreachable code

方法调用分为两类:本类调用、异类调用

本类调用:

方法前用 static修饰

方法名()

可看例题代码理解

异类调用(一个类调用另一个类的方法):

......

是内存划分出来的一部分,用于加载方法,提高运行效率(内存读取比硬盘快的多)

为了提高运算效率,就对空间进行了不同区域的划分,因为每一片区域都有特定的处理数据方式和内存管理方式。

栈的运行机制的理解(针对本例题,10的阶乘):

前置

内存区域读取执行引擎和本地方法库(先行者写好的类和方法)后,将数据传给加载器,以实现对我们写好的代码进行数据操作,实现应用价值。

求阶乘代码经过类加载器处理被内存读取后,局部变量num存入虚拟机栈,再根据方法库进行数据处理,记录它变化的最终结果后弹出返回

内存按照顺序读取数据,再依据栈方法的规则处理类加载器加载好的数据,然后弹出数据传给CPU进行运算返回

栈规则(依据本例题)

  1. 入栈的方法必须处理完

  1. 以方法为一个元素进行弹栈

  • 4
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值