Description
设S为一个数字序列
S1代表数字序列长度为1,只有一个数字1
Sn代表由Sn-1,N,Sn-1构成
例如S2为1,2,1
S3为1,2,1,3,1,2,1
Format
Input
一行给出数字N
N<=16
Output
输出Sn
Samples
输入数据 1
4
Copy
输出数据 1
1 2 1 3 1 2 1 4 1 2 1 3 1 2 1
这题是一道典型的递归题目,调用函数,反复调用。如果想不到递归的思想是很难做的。题目描述sn=sn-1,n,sn-1;这是一个重要的条件,由此我们可以看出来,其实输出的东西只有n数字,所以我们要设计递归来实现反复输出,应为n两边是对称的,所以要两次调用递归,每次递归都要n-1,因为题目描述中的sn-1。
递归的思想得慢慢理解,理解它的规律,不用递归是很难想到其他的方法来写的。
#include<iostream>
#include<cstring>
#include<cmath>
#include<algorithm>
#include<string>
#include<vector>
#include<math.h>
#include<iomanip>
#include<set>
#include<queue>
#include<stack>
#include<map>
#include<list>
using namespace std;
/*设S为一个数字序列
S1代表数字序列长度为1,只有一个数字1
Sn代表由Sn-1,N,Sn-1构成
例如S2为1,2,1
S3为1,2,1,3,1,2,1*/
int n;
void fun(int x)
{
if (x== 1)
{
cout << 1<<" ";
}
else
{
fun(x - 1);
cout << x<<" ";
fun(x - 1);
}
}
int main()
{
cin >> n;
fun(n);
}