實施,將通過從返回到達遞歸調用之後的行。如果對遞歸不熟悉,可能需要一些時間來適應它。如果您能夠使用調試器,我強烈建議您嘗試一下並檢查調用堆棧和局部變量值。但是,遞歸調用的順序可以按照以下方式進行擴展,使用示例,使用插入值的僞循環符號。
1. call lindex({1,2,3,4}, 0, 2):
int size=strlen(in); // assigns 4
if(0 == 4){ // condition is false
}
int ans = lastIndex({1,2,3,4}, 1, 2); // assigns 3, as we see below
if(3 != -1){ // condition is true
return 3;
}
2. call lindex({1,2,3,4}, 1, 2):
int size=strlen(in); // assigns 4
if(1 == 4){ // condition is false
}
int ans = lastIndex({1,2,3,4}, 2, 2); // assigns 3, as we see below
if(3 != -1){ // condition is true
return 3;
}
3. call lindex({1,2,3,4}, 2, 2):
int size=strlen(in); // assigns 4
if(2 == 4){ // condition is false
}
int ans = lastIndex({1,2,3,4}, 3, 2); // assigns 3, as we see below
if(3 != -1){ // condition is true
return 3;
}
4. call lindex({1,2,3,4}, 3, 2):
int size=strlen(in); // assigns 4
if(3 == 4){ // condition is false
}
int ans = lastIndex({1,2,3,4}, 4, 2); // assigns -1, as we see below
if(-1 != -1){ // condition is false
}else{
if(in[3] == 2){ // condition is true
return 3;
}
5. call lindex({1,2,3,4}, 4, 2):
int size=strlen(in); // assigns 4
if(4 == 4){ // condition is true
return -1;
}
如果我們討論各個步驟的語義,則實現變得更易於訪問。首先,檢查起始索引點是否是數組,在這種情況下,找不到所需的數字,返回-1。否則,我們會在數組的尾部尋找數字。如果可以在那裏找到,我們返回在遞歸調用中找到的索引。否則,我們測試當前位置是否與想要找到的數相等,因爲它不會出現在數組的尾部。總之,這將返回搜索號碼最右邊的索引(如果它包含的話)。
通過從遞歸調用返回的'後退'通過調用堆棧完成;每個遞歸調用都有自己的一組局部變量。
'int ans = lastIndex({1,2,3,4},1,2); //分配3,正如我們下面看到的那樣'這個步驟如何返回3 – bogor
@bogor在第3步中描述瞭如何調用返回值3,其中遞歸更進一步。 – Codor