【发布时间】:2017-03-26 07:37:53
【问题描述】:
我正在尝试使用调试器来理解这个递归,并试图逐步理解它。调试器显示smallAns返回数组的大小我不明白这个smallAns是如何返回大小的数组input[].谁能解释一下这个
#include<iostream>
using namespace std;
int subsequences(char input[], int startIndex,char output[][50]){
if(input[startIndex] == '\0'){
output[0][0] = '\0';
return 1;
}
int smallAns = subsequences(input, startIndex+1, output);
for(int i = smallAns; i < 2*smallAns; i++){
int row = i - smallAns;
output[i][0] = input[startIndex];
int j = 0;
for(; output[row][j] != '\0'; j++){
output[i][j + 1] = output[row][j];
}
output[i][j + 1] = '\0';
}
return 2*smallAns;
}
int main(){
char input[] = "abc";
char output[100][50];
int ans = subsequences(input, 0, output);
for(int i = 0; i < ans; i++){
for(int j = 0; output[i][j] != '\0'; j++){
cout << output[i][j];
}
cout << endl;
}
}
【问题讨论】:
-
@ruakh 编辑了代码
-
请在投反对票前提出宝贵的建议
-
smallAns是输入长度的 2 次方。我不知道为什么你的调试器说的不一样;我猜你要么在设置变量之前查看变量(所以你看到垃圾),要么你没有使output足够大(所以你正在粉碎堆栈然后看到垃圾)。 -
@ruakh
snallAns在这里返回数组的长度,我将输入作为mickymouse然后返回10,我也尝试了其他字符串,它给出了字符串的长度。
标签: c++ arrays algorithm recursion array-algorithms