1. 程式人生 > >利用遞迴方法求一個數組的最大值

利用遞迴方法求一個數組的最大值

1、直接利用遞迴:

package programmer;

import java.util.Scanner;

/*
 * 利用遞迴演算法求最大值
 */
public class MaxRecursion {
	public int maxRecursion(int[] A, int low, int high) {
		if (low > high)
			return -1;
		else {
			if (A[low] < maxRecursion(A, low + 1, high))
				return maxRecursion(A, low + 1, high);
			else
				return A[low];
		}
	}

	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		int N = sc.nextInt();
		int[] A = new int[N];
		for (int i = 0; i < A.length; i++)
			A[i] = sc.nextInt();
		System.out.println(new MaxRecursion().maxRecursion(A, 0, A.length - 1));
	}
}
2、利用二叉查詢尋找陣列中的最大值:
package programmer;

import java.util.Scanner;

/*
 * 利用二分查詢法遞迴尋找陣列中的最大值
 */
public class MaxBinarySearch {
	public int maxBinarySearch(int[] A, int low, int high) {
		if (low > high)
			return -1;
		else {
			int mid = (low + high) / 2;
			int tmp = maxBinarySearch(A, low, mid - 1) > maxBinarySearch(A,
					mid + 1, high) ? maxBinarySearch(A, low, mid - 1)
					: maxBinarySearch(A, mid + 1, high);
			return tmp > A[mid] ? tmp : A[mid];
		}
	}

	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		int N = sc.nextInt();
		int[] A = new int[N];
		for (int i = 0; i < A.length; i++)
			A[i] = sc.nextInt();
		System.out.println(new MaxBinarySearch().maxBinarySearch(A, 0,
				A.length - 1));
	}
}

但是複雜度並沒有減少,只是提供一種新的思考方法。

相關推薦

利用方法個數

1、直接利用遞迴: package programmer; import java.util.Scanner; /* * 利用遞迴演算法求最大值 */ public class MaxRecursion { public int maxRecursion(int[

java實現函式入門級例子:用函式個數中的

我們開始把陣列分為兩半,分別找出最大值,那麼這個最大值就是最後的最大值:同時我們左右兩邊繼續細分,停止條件就是細分到單個數值為止。 package chapter1; //使用遞迴求出一個數組中的最小值 public class FindMax { public sta

Java:利用方法鴨子數

問題描述:        一個人趕著鴨子去每個村莊賣,每經過一個村子賣去所趕鴨子的一半又一隻。這樣他經過了七個村子後還剩兩隻鴨子,問他出發時共趕多少隻鴨子?經過每個村子賣出多少隻鴨子? 題目分析:      設經過第n

python基礎練習--利用方法階乘!

題目:利用遞迴方法求5! 1 # -*- coding:utf-8 -*- 2 n = input('請輸入一個整數:') 3 def fib(n): 4 sum1 = 0 5 if n == 0: 6 sum1 =

【程式26】 利用方法5!

【題目】利用遞迴方法求5! #include<stdio.h> #define N 5 int main() { int fun(int n); int c=fun(N); printf("%d!=%d\n",N,c); return 0; } i

【程式22】 題目:利用方法5!。

/* 2017年3月7日16:47:13 java基礎50道經典練習題 例22 Athor: ZJY Purpose: 【程式22】 題目:利用遞迴方法求5!。 程式分析:遞迴公式:

java二分法來個數中一個的key

package TestArray;import java.util.Arrays;/** * 二分法查詢 */public class Test { public static void main(String[] args) { int[] arr = {30, 20, 50, 10,

基礎1--個數質因數

pre spa pac com urn space align images 分享 基礎1--求一個數的最大質因數 一、心得 二、代碼及結果 1 #include <iostream> 2 using namespace std; 3 int fin

編寫個數的函式Max, 要求用模板實現對任意資料型別資料都可應用該函式取結果,

/*編寫一求兩個數的最大值的函式Max, 要求用模板實現對任意資料型別資料都可應用該函式求取結果, 在main()函式中分別用整型、實型、字元型資料進行測試。 */ #include<iostream> #include<string.h> us

(hdu step 2.1.3)Largest prime factor(個數質因子的位置)

Everybody knows any number can be combined by the prime number.Now, your task is telling me what position of the largest prime factor.The position of prime

個數(利用三目運算子)

//求三個資料中的最大值 public class OperatorTest {public static void main(String[] args) {//定義三個變數int a = 20 ;int b = 50 ;int c = 30 ;//使用中間第三方變數實現

個數真約數

首先要理解什麼是最大真約數,最大真約數即是一個數除了它本身的最大的約數。比如100的最大真約數是50,99的最大真約數是33,98的最大真約數是49。 下面是程式碼: package book;

php 寫程序個數

定義函數 pyw max函數 https pst com amp 定義 http 最簡單的調用PHP自帶的max函數即可:echo max(1,2,3,4,5);如果要自定義函數的話:function test($a,$b,$c){ return $a > $b

C++個數

eof sizeof ios int sig turn c++ a + b -a //不使用if,:?等推斷語句。求兩個數字中最大的那個數字。 #include<iostream> using namespace std; int main(

求解單鏈表中的

1 #include<iostream> 2 using namespace std; 3 4 typedef struct LNode { 5 int data; 6 LNode *next; 7 }Lnode, *LinkList; 8 9 bool

C語言實現個數,C語言實現雞兔同籠問題

實驗三:輸入兩個數求最大者 #include<stdio.h> int main()//主函式 { int max(int x,int y); int a,b,c; printf("請輸入a:\n"); scanf("%d",&a); pr

個數(用函式指標變數呼叫函式)

#include<stdio.h> int max(int a,int b) {  if(a>b)  return a;  else  return b; } int main() {     int x,y,z;     scanf("%d%d",&

C#練習——用方法實現兩個數

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T

二維陣列10個數

#include<stdio.h> int main() {     int a[3][4]={{11,12,13,15},{9,7,8},{22,33,44}};//定義陣列及初始化     int i,j;     int row=0,colum=0,max=

行內函數,個數

#include<iostream> using namespace std; inline int max(int,int,int); int main() { int i=10,j=20,k=30,m; m=max(i,j,k); cout<&l