1 /* 2 题目描述: 3 请把纸条竖着放在桌子上,然后从纸条的下边向上方对折,压出折痕后再展开。此时有1条折痕, 4 突起的方向指向纸条的背面,这条折痕叫做“下”折痕 ;突起的方向指向纸条正面的折痕叫做“上”折痕。 5 如果每次都从下边向上方对折,对折N次。请从上到下计算出所有折痕的方向。 6 给定折的次数n,请返回从上到下的折痕的数组,若为下折痕则对应元素为"down",若为上折痕则为"up". 7 测试样例: 8 1 9 返回:["down"]10 */11 /*12 使用递归实现:13 折叠n次时的折痕 等于 折叠n-1次时的折痕+“down”+折叠n-1次时的折痕的逆的反14 n = 1时,折痕为:下;15 则n = 2时,折痕为:下 下 上;16 n = 3时,折痕为:下下上 下 下上上;17 */18 19 #include20 #include 21 #include 22 using namespace std;23 24 vector foldPaper(int n){25 vector fp;26 if (n == 1){27 fp.push_back("down");28 return fp;29 }30 vector fold = foldPaper(n-1);31 for (int i = 0; i < fold.size(); i++)32 fp.push_back(fold[i]);33 fp.push_back("down");34 for (int i = fold.size()-1; i >= 0; i--){35 if (fold[i] == "down")36 fp.push_back("up");37 else38 fp.push_back("down");39 }40 return fp;41 }42 43 int main(){44 vector result;45 result = foldPaper(4);46 for (int i = 0; i < result.size(); i++)47 cout << result[i] << endl;48 return 0;49 }