递归算法是编程中一个比较重要的算法,相信很多刚接触的小白在刚开始学习递归的时候会感觉很难,递归算法确实比较绕,需要灵活运用,下面就来一一介绍!
什么是递归算法
递归算法,我自我感觉和循环是比较像的,但还是有很大差距的,递归就是一直调用自己,比较简单。
如图这就是递归的主要执行顺序,这里最主要的就是把握好什么时候退出!!!
递归主要考虑什么
- 当往上抛时返回什么
- 每一层执行什么样的操作
- 什么时候后退出。退出条件是啥
然后拿题直接套这个模板就可以了
例题
1.1
从键盘中输入一个正整数,求这个数的阶乘
分析:
例如输入的数为5,最后输出的结果应该为54321
- 当往上抛时返回什么:首先知道刚开始的数为n,然后下一个是啥,不知道,然后往上抛呗,n * f(n-1) ;f(n-1)就相当于4
- 每一层执行什么样的操作:这个应该很好理解,一直乘呗
- 什么时候后退出。退出条件是啥:当n==1的时候就退出呗
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scan=new Scanner(System.in);
int n=scan.nextInt();
System.out.println(fun(n));
}
public static int fun(int n){
int c;
if(n==1){ //退出条件
c=1;
return c;
}else{
c=n*fun(n-1); //执行啥
return c;
}
}
}
这个就是递归比较基础的一个题,是不是很好理解,写起来也比较简单,刚开始可能不是很习惯用这个,多用就好了
1.2
再来一个比较经典的题目,Fibonacci sequence,这个应该都不陌生
**分析:**Fibonacci sequence有一个特点,第一个数和第二个数都是1,然后以后每一个数等于前两个数之和
- 当往上抛时返回什么:假如要求第5个数是啥,等于第四个数+第三个数;往上抛就完事了,遇到最上边
- 每一层执行什么样的操作:f(n-1)+f(n-2)呗
- 什么时候后退出。退出条件是啥,这个数列告诉了,第一个数和第二个数是确定的了1 1,这不就有条件了if(n1||n2){return 1;}
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scan=new Scanner(System.in);
int n=scan.nextInt(); //输入前多少个数
for(int i=1;i<=n;i++){ //
System.out.println(fun(i));
}
}
public static int fun(int n){
if(n==1||n==2){ //退出条件
return 1;
}else{
return fun(n-1)+fun(n-2);
}
}
}
看完这两个例题是不是感觉递归很简单了!!!!
消除恐惧最好的办法就是面对恐惧!!!!!!多练练就好了