day07
1、递归
递归:就是在当前方法中 调用自己。递归和迭代是等价的,而迭代就 是循环,所以递归也就是重复做某件事
递归的三要素:初始值,终止条件,步长
注意:如果循环能做到的就不要用递归,因为递归效率低,还耗费内 存。
递归的应用场景:一般树状结构需要使用递归来完成
比如菜单目录,每一层递归都是一个循环,如果不 知道有多少个子目录就没办法用循环
实例1:用递归实现求1~N的和
public class Recursion_02 {
public static void main(String[] args){
int a = sum1(6);
System.out.println(a);
}
public static int sum1(int n){
if(n==1){
return 1;
}else{
return sum1(n-1)+n;
}
}
}
实例2:已知位数,用递归实现求斐波那契数列对应数值
public class Recursion_03 {
public static void main(String [] args){
int a = fbi(10);
System.out.println(a);
}
public static int fbi(int n){
if(n==1||n==2){
return 1;
}else{
return fbi(n-1)+fbi(n-2);
}
}
}
实例3:已知数值,求在斐波那契数列中的位数(写两个方法互相调用)
public class Recursion_04 {
public static void main(String[] args){
fbi2(1);
}
//此方法功能为输入位数求对应数值
public static int fbi1(int n1){
//如果输入的位数为1或者2,那么数值均为1
if(n1==1||n1==2){
return 1;
//否则递归求前一位数
}else{
return fbi1(n1-1)+fbi1(n1-2);
}
}
//功能为输入数值求位数
public static void fbi2(int n2){
//如果输入的数值为1,那么输出位数为1或者2
if(n2==1){
System.out.println("位数为1或者2");
}else{
//判断输入的数值是否大于等于fbi1(a)
for(int a=3;n2>=fbi1(a);a++){
//如果等于则输出位数
if(n2==fbi1(a)){
System.out.println(a);
//如果不等于且小于下一位数,则证明不在斐波那契数列内
}else if(n2<fbi1(a+1)){
System.out.println("不在斐波那契数列内");
}
}
}
}
}
实例4:实现代码:按顺序打印一个数字的每一位(例如1234 打印出1 2 3 4)
public class work_03 {
public static void main(String[] args){
m1(1234);
}
public static void m1(int n){
if(n>9){
m1(n/10);
}
System.out.println(n%10);
}
}