class FoldPaper {
public:
vector<string> foldPaper(int n) {
// write code here
vector<string> res;
foldProcess(n, true, res); // 第一次的对折,形成的折现向下
return res;
}
void foldProcess(int n, bool down, vector<string>& res){
/* n: 还要对折多少次
down: 这一次的线是否向下
res: 用来存放结果的引用
*/
if(n==0) return;
foldProcess(n-1, true, res); // 上一次折痕上方的折痕一定向下
res.push_back((down?"down":"up"));
foldProcess(n-1, false, res); // 上一次折痕的下方的折痕一定向上
}
};
折纸问题的c++代码附带注释,思想是一样的,每次不断的求一条线的上面的上面的上面的...那条线,然后打印本条线,然后求出下边的那条线后返回给上一次的一条线,对大牛的代码做了修改,不使用额外的 i,n是剩余的还要对折的次数。这个题目用递归真是好舒服!!