C-seventh

C-seventh 20181102

递归:本质是函数的嵌套调用
两个条件:
1、必须有一个函数入口。
2、除了最后一次的操作可以不一样,其他每次操作必须一样。
递归:先找到前一次的运算,并且所有步骤都能用到统一个式子。

1.阶乘5!;
int sum = 1;
for(i = 1;i <= 5;i++)
	sum = sum * i;
1的阶乘加到20的阶乘。
for(i = 1;i <= 5;i++)
sum = sum * i;
代表5的阶乘,在i从1到5的过程中,分别求了各个数的阶乘,所以在这一过程中,分别把他们加起来,就是1到5的阶乘之和。
double sum = 1;
double sum0 = 0;
for(i = 1;i <= 20;i++)
	sum = sum * i;
	sum0 = sum0 + sum; 
printf("%e,%e\n",sum,sum0);sum0就是所求的阶乘之和
数据够大时需要用double类型,并且下面输出时要用%e
int fn(int n)
{
	if(n == 0 || n == 1)
		return 1;
	else
		return fn(n - 1) * n;

}
int sum(int n)
{
	if(n == 0 || n == 1)
		return 1;
	else
		return sum(n - 1) + n;

}
void test(int n)
{
	if(n != 0)
		test(n / 8);
	printf("%d\n",n % 8);

}

汉诺塔

void move(char x,char y)
	printf("%c -> %c \n",x,y);//把x移动到y上
void hn(char a,char b,char c,int n)//从第一个参数到第三个参数借助第二个参数
{
	if(n == 1)
		move(a,c);
	else
{
	hn(a,c,b,n - 1)
	move(a,c);
	hn(b,a,c,n - 1)
}
}
void main()
{
	test(10);
	printf("%d\n",fn(5));
	printf("%d\n",sum(100));
	hn('a','b','c',99);

}

快排

void qs(int a[],int left,int right)
{
	int i = left;
	int j = right + 1;
	int curr = a[left];
	int t;
	if(i < j)
{
	do
	{
	do
	{
	++i;
}while(curr >= a[i] && i <= right);
do
{
--j;
}while(curr <= a[i] && j > left);
if(i < j)
{
	t = a[i];
	a[i] = a[j];
	a[j] = t;

}

}while(i < j);
if(i > j)
{
	t = a[left];
	t[left] = a[i];
	a[j] = t;

}
qs(a,left,j-1);
qs(a,j + 1,right);
}

}

预处理命令(预命令)
1.宏定义
2.文件包含
<>–在安装目录中寻找
“”-现在本工程目录查找,如果找不到,再寻找安装目录
3.条件编译
#ifndef … #define…#endif->目的主要解决头文件重复包含

#define PI 3.14 //正确
宏定义后,如果程序中用到时需要一模一样抄写下来;
#define Max(x,y) ((x) > (y)) ? (x) : (y))//能带括号的全部带上,不会错
#define fn(a,b) (a * b)[另一种-((a) *  (b))]//这时候要看带括号没注意运算
#define Year (365 * 24 * 60 * 60) UL //具体用时需要在每个数后面都加上UL,无符号整型
条件编译:
#ifndef N
printf("aaa\n");
#else
printf("bbb\n");
#endif
发布了39 篇原创文章 · 获赞 10 · 访问量 756

猜你喜欢

转载自blog.csdn.net/weixin_43393776/article/details/83713702
C