递归编程
Java语言中的方法Method在其他语言当中也可能被称为函数Function。对于一些复杂的代码逻辑,如果 希望重复使用这些代码,并且做到随时任意使用,那么就可以将这些代码放在一个大括号{}当中,并且 起一个名字。使用代码的时候,直接找到名字调用即可。
- 程序开始执行的时候是先执行main方法。因为main方法是一个入口。
- 在java语言中所有的方法体中的代码都必须遵循自上而下的顺序依次逐行执行。
- main方法不需要程序员手动调用,是由JVM调用的。但是除了main方法之外其他的方法,都需要 程序员手动调用。
- 方法只有调用的时候才会执行,方法不调用是不会执行的。
- 方法定义在类体当中。方法定义的先后顺序没有关系
- 方法中的变量都属于局部变量。方法结束之后,局部变量占用的内存会自动释放。
阶乘和
使用递归调用的方法
public class 阶乘和 {
public static void main(String[] args) {
long res=leiJa(15);
System.out.println(res);
}
public static long jieCheng(int k) {
if(k==1) {
return 1;
}
return k*jieCheng(k-1);
}
public static long leiJa(int m) {
long res=0;
for(int i=1;i<=m;i++) {
res+=jieCheng(i);
}
return res;
}
}
自定义方法
方法的概念:
- Java方法类似于其他编程语言里面的函数,是一段可以重复调用的代码。
方法的作用:
- 简化代码,提高代码的可读性,可维护性,可重用性,安全性。
语法格式:
- 修饰符 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; //返回值,要求类型必须和方法声明中的类型一致
}
}
方法的分类
根据方法有没有参数可以分为有参和无参
public static int abc(int a,int b){ //不能缩写为abc(int a,b)
if(a>b)
return a;
return b;
}
public static int menu(){
System.out.println("欢迎使用!");
return 0;
}
public static void menu2(){
//void表示没有返回值,如果return 1;语法报错
return;
}
方法的调用: 方法名(实际参数列表)
- 实参和形参的类型必须一一对应,另外个数也要一一对应。
- 函数返回值小转大—>自动类型转换
- 函数实参小转大—>自动类型转换
public static long abc(float kk){
return 100L;
}
double res=abc(12.34f); //正确
long kk=abc(123); //正确
double res=abc(12.34);//语法错误
特殊关键字
- break;用来终止switch或者离它最近的循环。
for(int i=0;i<10;i++){
if(i>6)
break;
}
//完全等价于
for(int i=0;i<=6;i++){
}
- continue用来终止本次循环,进入下次循环
for(int i=0;i<10;i++){
if(i%2==0)
continue;
}
完全等价于
for(int i=1;i<10;i=i+2){
}
- return;用来终止它所在的一个方法的执行,返回调用处。
public class Test3 {
public static void main(String[] args) {
int res=abc(10);
System.out.println(res); //1
}
public static int abc(int k) {
for (int i = 1; i < k; i++)
return i;
return 0;
}
}
- System.exit();用来结束程序运行。
if(age<18)
System.exit(0);
System.out.println("welcome!");
程序调用自身的编程技巧称为递归.递归作为一种算法在程序设计语言中广泛应用
一个过程或函数在其定义或说明中有直接或间接调用自身的一种方法,它通常把一个大型复杂的问 题层层转化为一个与原问题相似的规模较小的问题来求解,递归策略只需少量的程序就可描述出解 题过程所需要的多次重复计算,大大地减少了程序的代码量。递归的能力在于用有限的语句来定义 对象的无限集合。一般来说,递归需要有边界条件、递归前进段和递归返回段。当边界条件不满足 时,递归前进;当边界条件满足时,递归返回。
递归需具备的条件:
- 子问题须与原始问题为同样的事,且更为简单
- 不能无限制调用本身,须有个出口,化简为非递归状态处理
- 递归的次数不能太多,否则容易造成栈内存溢出java.lang.StackOverflowError
- 网上有种说法是一般建议不要超过300层
- 构造方法不能递归调用。