方法的基本用法, 方法重载, 方法递归
方法
是一个代码片段,类似于c语言中的函数。方法的存在能够模块化的组织代码,做到代码的重复使用,不必写过多重复功能的代码。
使用方法时注意:
1.方法定义时每个参数要指定类型,也可以没有参数;
2.方法定义时如果没有返回值,则返回值类型应该写成void;
3.方法定义时的参数称为“形参”,方法调用时的参数称为“实参”;
4.方法的定义必须在类中,和c语言不同的是代码书写在调用位置的上方和下方均可以;
5.注意:在java中没有“函数声明”的概念。
方法重载
是同一个类中,方法名相同但是方法的参数不同(参数个数或者参数类型),构成了方法的重载,注意:当两个方法的名字相同,参数也相同但返回值类型不同时不构成重载。
方法递归
一个方法在执行过程中调用自身,就称为“递归”。
递归要注意的三点:
1.调用自己的本身;
2.要有一个趋近于终止的条件;
3.推导出递归的公式。
使用递归解决问题相当的方便。但是并不是所有问题都适合使用递归的方法解决,例如:求第n个斐波那契数,这一问题,使用递归解决时代码如下:
public class Test{
public static int fib(int n){
if(n==1||n==2){
return 1;
}
return fib(n-1)+fib(n-2);
}
public static void main(String[] args) {
Scanner scanner=new Scanner(System.in);
int n=scanner.nextInt();
int ret=fib(n);
System.out.println(ret);
}
虽然看起来代码写的比较简单,但是在实际调试过程中会发现,n越大,调试的越慢,额外的计算代价过大。举个例子:假如你要求第十个斐波那契数,由于 fib(10)=fib(9)+fib(8),这样一来又得求第九个和第八个数,又因为fib(9)=fib(8)+fib(7),fib(8)=fib(7)+fib(6),如此递归下去进行计算,会发现重复计算了好多次相同的斐波那契数,因此使用递归的方法反而效率变低了。现在看看使用非递归的代码(用一个简单的迭代就可以了):## 标题
public class Test{
public static int fib(int n){
int f1=1;
int f2=1;
int f3=1;
for(int i=3;i<=n;i++){
f3=f1+f2;
f1=f2;
f2=f3;
}
return f3;
}
public static void main(String[] args) {
Scanner scanner=new Scanner(System.in);
int n=scanner.nextInt();
int ret=fib(n);
System.out.println(ret);
}
}