DEBUG了一下才看出來,遞歸坑人啊。。。
成都創(chuàng)新互聯(lián)公司10多年成都企業(yè)網(wǎng)站定制服務(wù);為您提供網(wǎng)站建設(shè),網(wǎng)站制作,網(wǎng)頁設(shè)計(jì)及高端網(wǎng)站定制服務(wù),成都企業(yè)網(wǎng)站定制及推廣,對成都三維植被網(wǎng)等多個(gè)行業(yè)擁有豐富的網(wǎng)站營銷經(jīng)驗(yàn)的網(wǎng)站建設(shè)公司。
也建議你用DEBUG跟蹤一下。。
首先這里遞歸了幾次
float rmax = 0, rmin = 0, bmax = 0, bmin = 0;
mid = (i + j) / 2;
maxMin(i, mid, a, rmax, rmin);
當(dāng)i=0,mid=1的時(shí)候,上面幾行代碼的最后一行執(zhí)行完成,并輸出了最大最小值。
之后這個(gè)一行執(zhí)行完了繼續(xù)往下執(zhí)行,造成死循環(huán)
即i=2,j=1
分治那個(gè)方法基本都錯(cuò)了:
import?java.util.*;
public?class?Maxmin?{
public?int?max=0;
public?int?min=Integer.MAX_VALUE;
public?int?Min(int?a,?int?b){
if(a=b)
return?a;
else
return?b;
}
public??int?Max(int?a,?int?b){
if(a=b)
return?a;
else?
return?b;
}
public??void?min_max(int?a[]){
if?(a.length?==?1)?{
max?=?Max(max,?a[0]);
min?=?Min(min,?a[0]);
}?else?{
int?m[]?=?new?int[a.length?/?2];
int?n[]?=?new?int[a.length?-?a.length?/?2];
System.arraycopy(a,?0,?m,?0,?m.length);
System.arraycopy(a,?m.length,?n,?0,?n.length);
min_max(m);
min_max(n);
}
}
public?static?void?main(String?[]args){
Maxmin?object=?new?Maxmin();
int[]?array?=?new?int[100];
for(int?i=0;?iarray.length;?i++)
{
array[i]=(int)?(Math.random()*100+1);
System.out.print(array[i]+"?");
}
object.min_max(array);
System.out.println("最大值是:"+object.max);
System.out.println("最小值是:"+object.min);
}
}
這是分治求最大子數(shù)組和
首先重要點(diǎn)是:遞歸,這個(gè)是關(guān)鍵,何為遞歸,就是自己調(diào)用自己,比如這個(gè)代碼中的helper方法,就是遞歸,該代碼運(yùn)行時(shí),會(huì)自己調(diào)用自己很多次,數(shù)組就會(huì)兩分,兩分再兩分,這樣就會(huì)把大的問題分解成小的問題,最后把小的問題匯集起來得到答案。
你表達(dá)不出的東西和沒理解的就是這個(gè)遞歸,別小看這個(gè)遞歸,這是本代碼的關(guān)鍵點(diǎn),最重要的部分。
以下是使用分治法求x的n次方的Java程序:
?Copy code
public class Power {
public static void main(String[] args) {
double x = 2.0; // 底數(shù)
double n = 10; // 指數(shù)
double result = power(x, n);
System.out.println(x + " 的 " + n + " 次方為:" + result);
}
// 分治法求冪運(yùn)算
public static double power(double x, double n) {
if (n == 0) { // n為0時(shí),直接返回1
return 1;
}
double half = power(x, n / 2);
if (n % 2 == 0) { // n為偶數(shù)時(shí),兩半乘起來即可
return half * half;
} else { // n為奇數(shù)時(shí),需要多乘一次x
return half * half * x;
}
}
}
首先,在 main() 方法中定義了底數(shù) x 和指數(shù) n。然后調(diào)用 power() 方法求 x 的 n 次方,并將結(jié)果輸出到屏幕上。
power() 方法使用了分治法來實(shí)現(xiàn)冪運(yùn)算。當(dāng) n 是0時(shí),直接返回1;否則將 n 分成兩半,分別遞歸求出兩半的冪,然后根據(jù) n 是奇數(shù)還是偶數(shù)來計(jì)算結(jié)果,最后返回計(jì)算結(jié)果。
由于每次遞歸將 n 除以2,因此該算法的時(shí)間復(fù)雜度為 Θ(lgn)。
網(wǎng)站標(biāo)題:關(guān)于分治思想處理java代碼的信息
文章路徑:http://www.muchs.cn/article10/dopodgo.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供App設(shè)計(jì)、網(wǎng)站建設(shè)、移動(dòng)網(wǎng)站建設(shè)、定制網(wǎng)站、商城網(wǎng)站、手機(jī)網(wǎng)站建設(shè)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)