簡體   English   中英

Java StackOverflow遞歸函數錯誤

[英]Java stackoverflow error on recursive function

當我調用此函數時,為什么會出現stackoverflow錯誤? 我已經檢查了終端條件,但無法確定問題出在哪里。

public static TreeNode buildTree(int t1, int t2, ListNode[] nodeArray) {     
    if(t1 == t2){
        TreeNode temp = new TreeNode(nodeArray[t1].val);
        temp.left = null;
        temp.right = null;
        return temp;
    }
    else if(t1 > t2){
        return null;
    }

    else{   
        TreeNode root = new TreeNode(nodeArray[(t1+t2)/2].val);
        root.left = buildTree(0,(t1+t2)/2-1,nodeArray);
        root.right = buildTree((t1+t2)/2+1,nodeArray.length-1,nodeArray);
        return root;
    }
}

看來遞歸方法應該在t1t2之間的范圍內工作,所以遞歸調用應該是:

root.left = buildTree(t1,(t1+t2)/2-1,nodeArray);
root.right = buildTree((t1+t2)/2+1,t2,nodeArray);

您當前的遞歸調用永遠不會縮小范圍(您始終將一個范圍從0傳遞到中間,而將另一個范圍從中間傳遞到nodeArray ),因此遞歸永遠不會結束。

這只是調試101。

將以下行作為方法的第一行:

System.out.println("Entry, t1 = " + t1 + ", t2 = " + t2);

由此,您將能夠計算出流程。

用數組[0,1,2,3,4]像buildTree(0,4,array)調用您的方法的簡單示例:

1    root = 2;
2    buildTree(0, 1);
3        root = 0;
4        buildTree(0, -1);
5            null;
6        buildTree(1, 4);
7            root = 2;
8            buildTree(0, 1); // endless recursion. see 2nd line call

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM