上篇文章当中说到了递归的相关知识,总的来说,还是一句话:多做题才能有收获
下面是递归打印 i 到 j 这道题,实现相当简单,但是想得过程稍微动点脑子,要递归打印从某个数到某个数,那就要想清楚如何确定函数,函数的终止条件出口,
public class Main{
public static void main(String[] args){
f(1,6);
}
public static void f(int i,int j){
//找出口
if(i>j)
return;
System.out.print(i+"\t“);
//找变化
f(i+1,j);
}
}
稍微花点时间看一看,就知道基本思路了。
本来是想再粘一下有关数组求和的递归,这里推荐一下这位大佬:
https://www.cnblogs.com/yg1024/p/7726481.html
初入递归的小伙伴可能会觉得较为难懂,这里对一段代码做一下分析。
public static int f(int[]a,int begin){
if(begin==a.length)
return 0;
//对初学者较为难理解的在于这处
解读:
自己假设一个数组int []a = {1,2,3,4,5};
传入f(a,0),首先变成了return f(a,1)+a[0]
f(a,1)没有解决,所以类似抛出异常一样,向上抛出,
变成了return f(a,2)+a[2]
多次递归,最后当begin=a.length时结束,
前面的f(a,(1~5))均为0,本质上f()这个函数
只是为了作为一个标记,每回返回的是a[i]的这个值,
相当于每次加一个数组里的数
int x = f(a,begin+1);
return x+a[begin];
}
看似简单的实现的代码,其实坑比较多,建议再自己多想想,欢迎大家指正