方法和递归
意义
相当于是C语言的函数。简化代码。利于理解
格式
public static 返回值 函数名 (形参列表){
方法体;
}
方法的重载(overload)
指的是在java中为了方便可以执行一些特别的方法,方法体几乎一致,只是形参的类型不同的方法。
有些时候我们需要用一个函数同时兼容多种参数的情况, 我们就可以使用到方法重载。
方法的重载的条件:
- 方法名相同。
- 返回值不做要求。
- 形参的列表的类型不一致(有一个不一致即可)或者是参数的个数不一致。
- 必须是在同一个类里。
public static int sum(double a,double b) {
return (int)(a+b);
}
public static double sum(double a,int b,double c) {
return a+b+c;
}
细节
- 方法之间可以相互调用
递归
意义
一个方法在执行过程中调用自身, 就称为 “递归”。
将复杂的问题简单化。
有点像数学上的“数学归纳法”
例如:我们求n!的阶乘。
n=1时,1!=1,就相当于是一个递归的终止条件。
如果直接求大于2的不好求,我们可以求n=n*(n-1)!
1. 求n!的阶乘
public static int factor(int n) {
if(n=1) {
return 1;
}
return n*factor(n-1);
}
public static void main(String[] args) {
int n=3;
int ret=factor(3);
System.out.println(ret);
}
求打印出组成数字的每一位数字
public static int fun (int n) {
if(n>9) {
fun(n/10);
}
return n%10;
}
求打印出组成数字的每一位数字之和
public static int fun 1(int n) {
int sum=0;
while(n>9) {
fun(n/10);
}
return sum+=n%10;
}
//1.会陷入死循环,while和for在递归时(不同于if),不会在“归”的时候执行下面的语句,依然会进行判断。
//2.如果输入是12,程序最终打印的结果是2.这是因为sum是局部变量。
public static int fun2(int n) {
if(n<=9){
return n%10;
}
else {
return n%10+fun1(n/10);
}
}
求n个斐波那契数两种方法
递归写法
public static int fun3(int n) {
if (n==1 || n==2) {
return 1;
}
else {
return fun2(n-2)+fun2(n-1);
}
}
迭代写法
public static int fun4 (int n) {
if (n==1 || n==2) {
return 1;
}
int f1=1;
int f2=1;
int f3=0;
for(int i=1;i<n;) {
f3=f1+f2;
f1=f2;
f2=f3;
}
return f3;
}
青蛙跳台阶问题
//青蛙跳台阶问题
public static int fun5(int n) {
if(n==1) {
return 1;
}
if (n==2) {
return 2;
}
return fun5(n-1)+fun5(n-2);
}