扫码关注本人公众号
![](https://img.haomeiwen.com/i10027900/af2f5a1920184ce4.png)
案例1的代码
package com.simple;
public class AddTest {
static void f() {
System.out.println("hello java");
}
/**
* 加运算
* @param a
* @param b
* @return
*/
static int add(int a,int b) {
int c = a + b;
return c;
}
public static void main(String[] args) {
int x = 1;
int y = 2;
int z = 3;
System.out.println(add(x,y));
System.out.println(z);
}
}
案例1的过程分析
(1)运行该Java程序,进入到主函数里面
(2)初始化变量x
(3)初始化变量y
(4)初始化变量z
(5)调用add函数的时候,发生了参数的传递(实参x的内容传递给形参a,实参y的内容传递给形参b),并且进入到add函数里面
(6)变量a和变量b进行加运算,加运算的结果保存到变量c里面
(7)将变量c的内容返回给调用者(主函数),add函数执行完毕(a,b,c这3个变量的生命周期已结束)
(8)重新回到主函数里面,将add函数的返回值打印出来
(9)控制台打印变量z的值,主函数执行完毕,程序结束
案例2的代码
package com.simple;
public class DemoTest {
/**
* 求n的阶乘
* @param n
* @return
* @throws Exception
*/
static long f(int n) throws Exception {
if(n==0||n==1) {
return 1;
}
if(n<0) {
throw new Exception("不能小于0");
}
return n*f(n-1);
}
public static void main(String[] args) throws Exception {
System.out.println(f(5));
}
}
案例2的过程分析
(1)运行该Java程序,进入到主函数里面
(2)调用f(5)函数,进入到f(5)函数里面
(3)递归调用f(4)函数,进入到f(4)函数里面
(4)递归调用f(3)函数,进入到f(3)函数里面
(5)递归调用f(2)函数,进入到f(2)函数里面
(6)递归调用f(1)函数,进入到f(1)函数里面
(7)返回1给调用者(f(2)函数),f(1)函数执行完毕
(8)重新回到f(2)函数里面,将2和f(1)函数的返回值相乘,并返回乘运算的结果[等于2]给f(3)函数,函数f(2)执行完毕
(9)重新回到f(3)函数里面,将3和f(2)函数的返回值相乘,并返回乘运算的结果[等于6]给f(4)函数,函数f(3)执行完毕
(10)重新回到f(4)函数里面,将4和f(3)函数的返回值相乘,并返回乘运算的结果[等于24]给f(5)函数,函数f(4)执行完毕
(11)重新回到f(5)函数里面,将5和f(4)函数的返回值相乘,并返回乘运算的结果[等于120]给主函数,函数f(5)执行完毕
(12)重新回到主函数,将函数f(5)的返回值打印出来,主函数执行完毕,程序结束
网友评论