日常記錄 遞迴 方法呼叫棧分析

2021-10-06 00:07:06 字數 1694 閱讀 1907

public

class

main

public

static

intsplit

(int number)

return number;

}}

輸出:12136
聲名:滿足條件呼叫兩次split方法,

將分別用兩種方法呼叫棧作為基準

無論是否滿足if條件必被呼叫&方法呼叫棧

規律:split(number 永遠會執行,直到return)

即a: split 12、6、3、1 永遠會觸發 返回12情況下不進行展示 那麼必有返回值如下順序

1 3 6

當滿足3 的時候 程式優先走 split((number + 1) / 2)

即有 b: split 4、2、1 對應返回值順序如下

1、2這個 1、2在split 3 時候被呼叫,且先於a中split 1 執行 先進行顯示(執行順序跟彈棧順序不要弄混)

即結果為

b: 12 a: 136

12136

不進行詳細說明

優先呼叫

split 12、6、3、2、1

固定輸出 1 2 3 6

只需要考慮split 3 中 特殊情況

split 3 中 執行完 if 中**塊後,已經有 print 1 2

輸出 12

再執行無論是否滿足條件 都將要觸發** print(split (3/2))

print split(1)–return 1

輸出121

特殊情況split 3 結束

最終結果:12136

優先呼叫&方法呼叫棧做基準(詳細**)

(方法優先執行,

即如果滿足 number%2!=0 條件先只考慮

split((number + 1) / 2)

這個基本操作,後續操作當作掛載在此操作後的操作暫時不予理會

)方法呼叫棧如下 向上彈出

number

split

return11

2123

2363

612612

num==2,不滿足條件

split 1 --return 1

print:1

num==3,滿足條件

split 2—return 2

print:2

走split 3/2

(這裡split 1 一次壓入新棧)

number

split

return11

split 1 return 1

print:1

num==6,不滿足條件

split 3 --return 3

print:3

num==12,不滿足條件

split 6–return 6

print:6

遞迴呼叫的棧溢位

如下 include include int recurse int x int main int argc,char ar 22執行結果如下 hxl hxl virtual machine 桌面 task code r 100 x 100.a at 0x7ffcfce0afd0 x 99.a at...

方法的遞迴呼叫

在乙個方法中可以呼叫其它的方法 如在a方法中呼叫b方法 可以看到是沒有問題的,那我們在方法b中也呼叫方法a呢?package com.dh.method public class method03 public static void a public static void b 一開始是沒有問題的...

方法的遞迴呼叫

1 什麼是遞迴?方法自身呼叫自身。a a 2 遞迴很耗費佔記憶體,遞迴演算法可以不用的時候盡量別用。3 以下程式執行的時候發生了這樣的乙個錯誤 不是異常,是錯誤error j a lang stackoverflowerror 棧記憶體溢位錯誤。錯誤發生無法挽回,只有乙個結果,就是jvm停止工作。4...