有关数组的基础递归

来源:互联网 发布:中国网络资讯台无锡市 编辑:程序博客网 时间:2024/05/29 10:00

1.递归求数组中最大值

package yy.digui;public class Max {public static void main(String[] args) {// 用递归求一个整数数组a中的最大值int i = 0;int max = 0;int[] a = {9, 3, 10, 2, 6, 2, 19};i = a.length;max = f(a, i);System.out.println(max);}static int f(int[] a, int i){if(i == 1){return a[0];}else{return Math.max(f(a, i-1), a[i - 1]);}} }
运行结果:19


2.递归求begin到end索引处的数组之和

package yy.digui;public class Sum {//从begin项开始到end项的和public static void main(String[] args) {int[] a = {1, 2, 3, 4, 5, 6};int sum = 0;//sum = f(a, 5);sum = f(a, 0, 5);System.out.println(sum);}//从begin到最后一项的和/*public static int f(int[] a, int begin){int sum = 0;if(begin == a.length){return 0;}else{sum = f(a, begin + 1);return sum = sum + a[begin];}}*///从第一项到end项的和/*public static int f(int[] a, int end){int sum = 0;if(end < 0){return 0;}elsesum = f(a, end-1);return sum += a[end];}*///从begin项开始到end项的和/*private static int f(int[] a, int begin, int end) {int sum = 0;if(begin > end){return 0;}else{sum = f(a, begin, end-1);return sum += a[end];}}*///从begin项开始到end项的和private static int f(int[] a, int begin, int end){int sum = 0;if(begin > end){return 0;}else{sum = f(a, begin+1, end);return sum += a[begin];}}}
运行结果:21

3.不放回取球

package yy.digui;public class Getball {public static void main(String[] args) {int x = f(10, 3);System.out.println(x);}//n个球中取m个球(不放回),有多少种取法public static int f(int n, int m){//如果取得球数大于总球数,则没有取法if(n < m){return 0;}//如果取得球数等于总球数,则只有一个取法if(n == m){return 1; }//取的球数为0,则只有一个取法if(m == 0){return 1;}//设有一个球是我们想要取的球, 可能有两个情况,第一个情况 球已经被我们取了,剩下只要在n-1个球中取m-1个,另一个情况是没取到想要的球, 即 在剩下的n-1个球取 m个球return f(n - 1, m - 1) + f(n - 1, m);}}

运行结果:120