これはLeetCode質問、尋ねていることつの連結された数字を合計することで、例えば
入力である:(2 - > 4 - > 3)+(5 - > 6 - > 4)
出力: 7 - > 0 - > 8変数が再帰的にどのように流れますか?
質問:
次のコードを使用し、再帰的方法、すべての再帰呼び出し(最後の行の3番目の)新しいresult
を構築します、私はなぜそのまわりで私の頭をラップする難しさを持っています古いresult
は新しいresult
で上書きされませんか?これは、result
が異なるスコープに属しているためです(たとえば、scope1.result、scope2.result?
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) { val = x; }
* }
*/
public ListNode op(ListNode l1, ListNode l2, int carry) {
if (l1==null && l2==null) {
return carry==0 ? null: new ListNode(carry);
}
if (l1==null && l2!=null) {
l1 = new ListNode(0);
}
if (l1!=null && l2==null) {
l2 = new ListNode(0);
}
int sum = l1.val + l2.val + carry;
ListNode result = new ListNode(sum % 10);
result.next = op(l1.next, l2.next, sum/10);
return result;
}
何が([スタックフレーム]と呼ばれて探しているhttps://stackoverflow.com/questions/10057443/explain-the-concept-of -a-stack-frame-in-a-nutshell)(または* callstack *)を使用します。 –