亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

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

這個遞歸代碼如何改變我的列表?

這個遞歸代碼如何改變我的列表?

qq_花開花謝_0 2022-11-02 10:01:48
我嘗試在 IntellIj 中運行和調試以下代碼,以跟蹤我的代碼的每一行的作用,但我仍然不明白結果。public static void testMyFun() {    List<Integer> xs = new ArrayList<Integer>();   for (int i = 0; i < 5; i++)     xs.add(i);    myFun(xs,2);  System.out.println(xs);  }   public static <A> void myFun (List<A> xs, int n) {    if (n > 0) {       A x = xs.get(0);      xs.remove(0);     xs.add(x);     myFun(xs, n-1);    } 我得到的結果是 [ 2,3,4,0,1] 0 和 1 如何到達列表的末尾?
查看完整描述

5 回答

?
米脂

TA貢獻1836條經驗 獲得超3個贊

在您的代碼中執行myFun({0,1,2,3,4},2);.

這執行myFun({1,2,3,4,0},1);.

下一個執行的 myFun 是myFun({2,3,4,0,1},0);,它立即停止。

這是因為您刪除了第一個元素并將其添加到末尾(add()將其附加到末尾)


查看完整回答
反對 回復 2022-11-02
?
胡子哥哥

TA貢獻1825條經驗 獲得超6個贊

出色地


A x = xs.get(0);  


xs.remove(0); 


xs.add(x); 

將第一個元素移動到最后一個位置


if (n > 0) {  

盡管n is > 0


你從


myFun(xs,2);

并由于以下原因遞歸調用 N 次myFun(xs,n-1);


所以你將 2 第一個元素移動到數組的末尾


查看完整回答
反對 回復 2022-11-02
?
米琪卡哇伊

TA貢獻1998條經驗 獲得超6個贊

函數“myFun”從列表中刪除 n 個元素,然后將它們再次添加到列表中。add 方法將元素添加到列表的末尾。因為您發送了 n=2 。myFun 將從列表的“頭”中刪除 0,1,然后移動到列表的末尾。



查看完整回答
反對 回復 2022-11-02
?
桃花長相依

TA貢獻1860條經驗 獲得超8個贊

因為您已將n設置為 2。所以基本上 myFun() 最多會執行兩次。myFun() 正在刪除列表的第一個元素并將其重新添加到后面。由于這只能發生兩次,因此前兩個元素(0 和 1)將被發送到列表的后面。



查看完整回答
反對 回復 2022-11-02
?
守著一只汪

TA貢獻1872條經驗 獲得超4個贊

原始列表值:

01234

當 n =2 列表修改為

12340

當 n=1 列表修改為

23401

當 n 達到 0 時,遞歸將停止。并且列表中的項目當前順序將是

23401


查看完整回答
反對 回復 2022-11-02
  • 5 回答
  • 0 關注
  • 168 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號