一 递归编程
Java
语言中的方法
Method
在其他语言当中也可能被称为函数
Function
。对于一些复杂的代码逻辑,如果 希望重复使用这些代码,并且做到随时任意使用,那么就可以将这些代码放在一个大号{}
当中,并且 起一个名字。使用代码的时候,直接找到名字调用即可。 程序开始执行的时候是先执行main
方法。因为
main
方法是一个入口。 在java
语言中所有的方法体中的代码都必须遵循自上而下的顺序依次逐行执行。 main方法不需要程序员手动调用,是由
JVM
调用的。但是除了
main
方法之外其他的方法,都需要 程序员手动调用。 方法只有调用的时候才会执行,方法不调用是不会执行的。 方法定义在类体当中。方法定义的先后顺序没有关系 方法中的变量都属于局部变量。方法结束之后,局部变量占用的内存会自动释放。
例题:计算1到20的阶乘和
public static long jieCheng (int k) {
long res =1;
for(int i=1;i<=k;i++)
res*=i;
return res;
}
public static void main(String[] args) {
long res=0;
for(int i=1;i<=20;i++)
res+=jieCheng(i);
show(res);
}
public static void show(long kk) {
System.out.println("1!+2!+...+20!="+kk);
}
}
二 自定义方法
1.方法的概念:
Java
方法类似于其他编程语言里面的函数,是一段可以重复调用的代码。
2.方法的作用:
简化代码,提高代码的可读性,可维护性,可重用性,安全性。
3.语法格式:
修饰符 public static
返回值类型:用于限定调用方法值的数据类型。
返回值:被return
语句返回的值,该值会返回给调用者。
return关键字用于结束方法以及返回方法指定类型的值。
参数名:
是一个变量,用于接收调用方法指定类型的值。
// 计算 15!+7!+9!+3!+1=?public class Cal {public static void main ( String [] args ){// 调用方法的规则【方法名称(实际参数)】long res = jieCheng ( 15 ) + jieCheng ( 7 ) + jieCheng ( 9 ) + jieCheng ( 3 ) + 1 ;System . out . println ( res );}// 计算阶乘 基本格式为【 public static 返回值类型 方法名称(参数类型 形式参数名称, ... )】public static long jieCheng ( int params ){long res = 1 ;for ( int i = 1 ; i <= params ; i ++ ){res *= i ;}return res ; // 返回值,要求类型必须和方法声明中的类型一致}}
4.方法的调用:
方法名(实际参数列表)
1.)实参和形参的类型必须一一对应,另外个数也要一一对应。
2.)函数返回值小转大
—>
自动类型转换
3.)函数实参小转大
—>
自动类型转换
5.特殊关键字
(1.)break;用来终止switch或者离它最近的循环。
(2.)continue用来终止本次循环,进入下次循环
(3.)return;用来终止它所在的一个方法的执行,返回调用处
(4.)System.exit();用来结束程序运行。
典型案例
1.斐波那契数列是1,1,2,3,5,8,13,21,34…,也称为黄金分割数列,兔子数列
package 递归调用;
public class 斐波那契数列 {
public static void main(String[] args) {
// 兔子数列
int res = geShu(10);
System.out.println(res);
}
public static int geShu(int num) {
if (num == 1)
return 1;
if (num == 2)
return 2;
return geShu(num - 1) + geShu(num - 2);
}
}
2.汉诺塔问题
package 递归调用;
public class 汉诺塔 {
public static void main(String[] args) {
long res = move(63);
System.out.println(res);
}
public static long move(int k) {
if (k == 1)
return 1;
return 2 * move(k - 1) + 1;
}
}
3.十进制转8进制和16进制
public static void main(String[] args) {
// 10进制转8进制
int k=100;
String ss="";
while (true) {
int k2=k%8;
k/=8;
System.out.println(k+"---"+k2);
ss=k2+ss;
if(k==0)
break;
}
System.out.println(ss);
}
public static void main(String[] args) {
//十进制转十六进制
int k=123456;
String ss="";
while(true) {
String i="ABCDEF";
int k1=k%16;
k=k/16;
if(k1<10) {
ss=k1+ss;
}else {
char h=i.charAt(k1-10);//charAt() 方法用于返回指定索引处的字符。索引范围为从 0 到 length() - 1
ss=h+ss;}
if(k==0)
break;
}
System.out.println(ss);
}