第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

有人可以引導(dǎo)我完成這段代碼的 Java 遞歸過程嗎?

有人可以引導(dǎo)我完成這段代碼的 Java 遞歸過程嗎?

猛跑小豬 2023-12-13 16:58:06
我在理解這個特定代碼的遞歸過程時遇到了一些困難。public static void testMethod(int n){      if(n > 0){         testMethod(n-1);         System.out.print("A");         testMethod(n-1);         System.out.print("B");      }}例如,如果在我的 main 方法中輸入testMethod(2);代碼的輸出是:ABAABB。在我的腦海中,我認(rèn)為這段代碼會運行直到n=0跳過該if語句,但總共運行 3 次并AB每次都輸出。顯然,我的想法不正確。如果有人可以引導(dǎo)我完成為什么會這樣ABAABB而不是類似的過程ABABAB,我將不勝感激!
查看完整描述

5 回答

?
LEATH

TA貢獻1936條經(jīng)驗 獲得超7個贊

實際上,您可以逐步完成此過程,想象沿途每一步 n是什么。


也許最重要的一點是,當(dāng)遞歸達到 1-case 時,它會打印“ AB ”,但即使它不在 1-case 中,它也會在第一次調(diào)用自身后打印A ,在調(diào)用自身后打印B第二次。因此,當(dāng)我們調(diào)用 2 時,我們期望先出現(xiàn) 1 種情況(“ AB ”),然后是“ A ”,然后是 1 種情況(“ AB ”),然后是“ B ”?;颉?ABAABB ”


testMethod(2) {

--testMethod(1) {

----testMethod(0);

----System.out.print("A");

----testMethod(0);

----System.out.print("B");

--}

--System.out.print("A");

--testMethod(1) {

----testMethod(0);

----System.out.print("A");

----testMethod(0);

----System.out.print("B");

--}

-- System.out.print("B");

}

如果您按順序瀏覽打印內(nèi)容,那么您將得到此輸出是有意義的。


查看完整回答
反對 回復(fù) 2023-12-13
?
慕村9548890

TA貢獻1884條經(jīng)驗 獲得超4個贊

關(guān)鍵是要記住,一旦調(diào)用遞歸,子調(diào)用中的所有指令都會在父調(diào)用中的其余指令執(zhí)行之前執(zhí)行。代碼中有兩次對 (n-1) 的遞歸調(diào)用,每次打印之前一次。


讓我們嘗試可視化 testMethod(2) 的調(diào)用堆棧:n=2 > 0,則主堆棧為:


1. testMethod(1); // 2- 1

2. System.out.print("A");

3. testMethod(1); // 2 - 1

4. System.out.print("B");`

現(xiàn)在讓我們考慮子調(diào)用 testMethod(1) n=1 > 0, stack for testMethod(1); =>


testMethod(0); // 1-1

System.out.print("A");

testMethod(0); // 1 -1

System.out.print("B");`

由于測試方法(0);不執(zhí)行任何操作( 0 不 > 0)我們可以刪除 testMethod(0) 以簡化 testMethod(1) 的堆棧;=>


System.out.print("A");

System.out.print("B");`

現(xiàn)在讓我們將其替換回主堆棧中的 testMethod(2) =>


1.1 System.out.print("A");//-----

                                 //-----> testMethod(1)

1.2 System.out.print("B");`//----


2. System.out.print("A");


3.1 System.out.print("A");//-----

                                 //-----> second testMethod(1)

3.2 System.out.print("B");`//----


4. System.out.print("B");`

然后按 ABAABB 的順序打印出來


查看完整回答
反對 回復(fù) 2023-12-13
?
婷婷同學(xué)_

TA貢獻1844條經(jīng)驗 獲得超8個贊

如果您熟悉樹結(jié)構(gòu)及其遍歷,那么理解任何遞歸方法的工作過程就會容易得多。對于此方法,遞歸樹將如下所示:

https://img1.sycdn.imooc.com/6579724a0001723406510202.jpg

對于 n=2,完整的樹如下:

https://img1.sycdn.imooc.com/65797253000177da06480248.jpg

現(xiàn)在您需要從左到右遍歷樹(基于中序,僅葉子),您將得到:

打?。ā癆”) 打?。ā癇”) 打印(“A”) 打?。ā癆”) 打印(“B”) 打?。ā癇”)

這是:ABAABB


查看完整回答
反對 回復(fù) 2023-12-13
?
嗶嗶one

TA貢獻1854條經(jīng)驗 獲得超8個贊

假設(shè)您的代碼行是


public static void testMethod(int n) {

    if (n > 0) {

        testMethod(n - 1);       /* line1 */

        System.out.print("A");   /* line2 */

        testMethod(n - 1);       /* line3 */

        System.out.print("B");   /* line4 */

    }                            /* line5 */

}

然后你需要執(zhí)行以下步驟:


 1. n=2: line1 -> testMethod(n=1)

 2. n=1: line1 -> testMethod(n=0)

 3. n=0: line5 -> return

 4. n=1: line2 -> prints "A"

 5. n=1: line3 -> testMethod(n=0) 

 6. n=0: line5 -> return

 7. n=1: line4 -> prints "B"

 8. n=1: line5 -> return

 9. n=2: line2 -> prints "A"

10. n=2: line3 -> testMethod(n=1)

11. n=1: see 2-8

... n=1:          prints "AB"

18. n=2: line4 -> prints "B"

19. n=2: line5 -> return


查看完整回答
反對 回復(fù) 2023-12-13
?
精慕HU

TA貢獻1845條經(jīng)驗 獲得超8個贊

所以第一個testMethod是用2調(diào)用的。它檢查是否 2 > 0 -> true

現(xiàn)在讓我們說得更清楚testMethod1是用1調(diào)用的 ,它檢查是否 1 > 0 -> true

現(xiàn)在使用0調(diào)用testMethod2

0 > 0 -> false 這個調(diào)用什么也不做,所以回到testMethod1

testMethod1打印 A用0調(diào)用testMethod3,所以什么也沒有發(fā)生,然后再次 返回testMethod1 testMethod1打印 B 現(xiàn)在我們回到原來的testMethod調(diào)用

A 被打印,現(xiàn)在我們再次做同樣的事情,所以 AB 被打印,最后 B


查看完整回答
反對 回復(fù) 2023-12-13
  • 5 回答
  • 0 關(guān)注
  • 245 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號