已知a[n]为整型数组,试写出实现下列运算的递归算法。
   1)求数组a中的最大整数。
   2)求n个整数的平均值。

解决方案 »

  1.   

    求最大整数的
    import java.util.*;
    public class TestArray {
    public static void main(String[] args) {
    Random r = new Random();
    int[] ai = new int[20];
    for(int i=0; i<ai.length; i++) 
    ai[i] = r.nextInt(100);
    for(int i : ai)
    System.out.print(i + ", ");
    System.out.println("\n" + max(ai, 0, ai.length-1));
    }

    public static int max(int[] i, int start, int end) {
    if(end - start == 1)
    return i[start] > i[end] ? i[start] : i[end];
    if(start == end)
    return i[start];
    int ms = max(i, start, (start+end)/2);
    int me = max(i, (start+end)/2 + 1, end);
    return ms > me ? ms : me;
    }
    }
    我还真想不出求平均值怎么用递归..
      

  2.   

    //avg
    public static float avg(int[] array, int length) {
    if (array == null || length < 1) {
    throw new IllegalArgumentException();
    }
    if (length == 1) {
    return array[0];
    } else {
    return ((array[length - 1] + (length - 1) * avg(array, length - 1)) / length); }
    }
      

  3.   

    import java.util.Scanner;public class Test
    {
    public static void main(String[] args)
    {
    Scanner in=new Scanner(System.in);
    int[] digit=new int[10];
    for(int i=0;i<digit.length;i++)
    digit[i]=in.nextInt(); Test array=new Test(digit);
    System.out.println("The highest number is "+array.sort()+",and the average is "+array.average());
    }
    public Test(int[] array)
    {
    n=array;
    }

    public double average()
    {
    if(index==n.length-1)
    {
    index=0;
    return (result+=n[n.length-1])/n.length;
    }
    result+=n[index];
    index++;
    return average();
    } public int sort()
    {
    if(index==n.length-1)
    {
    index=0;
    return n[n.length-1];
    }
    if(n[index]>=n[index+1])
    {
    int temp=n[index+1];
    n[index+1]=n[index];
    n[index]=temp;
    }
    index++;
    return sort();
    }
    private double result=0;
    private static int index=0;
    private int[] n;
    }
      

  4.   

    public class DumpMethods {    public int maxNumber(int[] arr, int n) {
            n--;
            if (n == 1) {
                if (arr[1] < arr[0])
                    return arr[0];
                else
                    return arr[1];
            } else {
                if (arr[n] <  maxNumber(arr, n))
                    return maxNumber(arr, n);
                else
                    return arr[n];
            }
        }    public double sumNumber(int[] arr, int n) {
            n--;
            if (n == 1) {
                return arr[0] + arr[1];
            } else {
                return arr[n]+sumNumber(arr, n);
            }
        }    public static void main(String args[]) {
            DumpMethods dm = new DumpMethods();
            int[] array = { 6,1, 2, 3, 4 };
            int maxNumber = dm.maxNumber(array, array.length);
            double aveNumber = dm.sumNumber(array, array.length)/array.length;
            System.out.println(maxNumber);
            System.out.println(aveNumber);
        }
    }
      

  5.   

    package book.upload;public class TestArray { public static void max(int[] a,int no,int max){
    if (a[no]>max)
    max=a[no];
    if (no>=a.length-1){
    System.out.println("max="+max);
    return;
    }
    max(a,no+1,max);
    }
    public static void avg(int[] a,int no,double avg){
    avg=(avg*no+a[no])/(no+1);
    if (no==a.length-1){
    System.out.println("avg="+avg);
    return;
    }
    avg(a,no+1,avg);
    }
    public static void avg2(int[] a,int no,int sum){
    sum+=a[no];
    if (no==a.length-1){
    System.out.println("avg="+sum/(no-1));
    return;
    }
    avg(a,no+1,sum);
    }
    public static void main(String[] args) {
    int a[]={1,2,3,10,4,9,5,7,8};
    max(a,0,a[0]);
    avg(a,0,0);
    avg2(a,0,0);
    }}
      

  6.   


    public class Test {
    static int n=9;   //假设数组中有10个元素,为a[0]~a[9]
    static int[] a={18,-7,31,64,5,-26,78,18,-99,10};  //随意设置的数组初值
    static int max=a[0]; //存放数组中的最大值
    static double sum=0; //存放数组中所有元素之和
    static double avg;   //存放数组的平均值


    static void doMax(){ //求最大值函数
    if(a[n]>max){
    max=a[n];
    }

    if(n>0) {
    n--;
    doMax();
    } }

    static void doAvg(){   //求平均值函数
    if(n<10){
    sum=sum+a[n];
    n++;
    doAvg();
    } else {
    avg=sum/a.length;
    }
    }

    public static final void main(String[] args) {
    doMax();
    System.out.println(max);
    doAvg();
    System.out.println(avg);
    }
    }
      

  7.   

    什么都问啊?很长时间没来csdn了,还是老样子
      

  8.   

    写了个递归的求最大值,你看看可以吗?
    import java.util.Scanner; 
    public class Sca { public static int digui(int[] a,int n,int i,int max)
    {
    if(i!=n-1)
    {
    return digui(a,n,i+1,max > a[i]?max:a[i]);
    }
    else
    {
    return (max > a[i]?max:a[i]);
    }
    }
    public static  void main(String[] args)
        {
    int[] a = {1,2,3,4,5};
    int t = digui(a,5,0,a[0]);
    System.out.printf("Max = %d\n",t);
        }
    }
      

  9.   

    对上面的程序稍微改了下,就是求平均值了
    import java.util.Scanner; 
    public class Sca { public static double digui(int[] a,int n,int i,int total)
    {
    if(i!=n-1)
    {
    return digui(a,n,i+1,total+a[i]);
    }
    else
    {
    return ((total+a[i])/(double)n);
    }
    }
    public static  void main(String[] args)
        {
    int[] a = {1,2,3,4,5};
    double t = digui(a,5,0,0);
    System.out.println(t);
        }
    }