这是一个找出一段数字中最长升序的编码。可是我看不懂 还请大家指导一下
#include<stdio.h>#define M 5
int a[M],b[M],len=-1,sign=0;
void dfs(int n,int mark) //定义一个函数进行运算
{
int i,flag;
if(n==0)
{
flag=1;
for(i=1;i<len;i++)
if((b[i-1]<b[i])!=(b[i]<b[i+1]))
{
flag=0;
break;
}
if(flag==1)
{
sign=1;
for(i=0;i<=len;i++)
printf("%d",b[i]);
printf("\n");
}
}
else
if(M-mark>n)
{
len++;
b[len]=a[mark];
dfs(n-1,mark+1);
b[len]=0;
len--;
dfs(n,mark+1);
}
else
{
len++;
b[len]=a[mark];
dfs(n-1,mark+1);
b[len]=0;
len--;
}
}
void main()
{
int i;
for(i=0;i<M;i++)
scanf("%d",&a[i]);
for(i=M;sign==0;i--)
dfs(i,0);
}
我大概知道它先编了个函数 但是好多if 和else 我看不懂 还希望能有人讲解下总的原理 谢谢了