递归算法
简介
递归也就是自己调用自己的一种算法,通俗来说就是写一个子函数,然后在子函数中反复调用自身的过程,递归可以应对一些反复执行同一单调过程的题目。如在斐波那契数列求第n项的问题中就是反复执行执行第三项等于前俩项,所以就可以用递归来解决这个问题。做重复循环的问题还有一种方法就是之前大家学的for循环了,一开始不习惯用递归解决问题的同学都可以先从for循环入手,等用for循环做出了相关问题,再将他转化成递归函数。先看一道斐波那契数列的for和递归俩种解决方法。
例题
求数列1,1,2,3,5,8…的第n项
1.首先分析这道题,从第三项开始每一项都是前俩项的和,所以用到某种重复进行某一个过程的方法就是for循环和递归了
2.确定用那种算法之后,我们就该想到他是一组数,所以我们要用数组存下来,之后求第几项,就用for依次求出第n项
代码如下
package 斐波那契;
public class Main {
static int[] numbers = new int[101];
public static void main(String[] args){
//用for循环
numbers[0]=1;
numbers[1]=1;
for(int i = 2;i<100;i++){
numbers[i]=numbers[i-1]+numbers[i-2];
}
//递归
find(100);
}
public static int find(int i){
if(i==1||i==0){
return 1;
}
return find(i-1)+find(i-2);
}
}
这里的find就是一个递归函数了,递归函数一般有以下几个部分组成:
1.递归的出口,即当函数执行到某一个数的时候要返回一个确切的值或者让函数终止
2.递归过程,即函数所要重复的过程,包含了调用函数自身的过程
总结
递归对于初学者来说还是一个很难理解的过程,但是多练几道题之后就可以慢慢的理解他了。递归往往容易错的就是容易漏掉递归的出口记住这点应该就没什么问题了。下面附上几道题目。
https://download.csdn.net/my