递归指的是在函数的定义中使用函数自身的方法。
#include
double factorial(unsigned int i)
{
if(i <= 1)
{
return 1;
}
return i * factorial(i - 1);
}
int main()
{
int i = 15;
printf("%d 的阶乘为 %f\n", i, factorial(i));
return 0;
}
结果:
15 的阶乘为 1307674368000.000000
下面的实例使用递归函数生成一个给定的数的斐波那契数列:
#include
int fibonaci(int i)
{
if(i == 0)
{
return 0;
}
if(i == 1)
{
return 1;
}
return fibonaci(i-1) + fibonaci(i-2);
}
int main()
{
int i;
for (i = 0; i < 10; i++)
{
printf("%d\t\n", fibonaci(i));
}
return 0;
}
结果:
0
1
1
2
3
5
8
13
21
34
C 语言它允许您定义一个函数,能根据具体的需求接受可变数量的参数。下面的实例演示了这种函数的定义。
int func(int, ... )
{
.
.
.
}
int main()
{
func(2, 2, 3);
func(3, 2, 3, 4);
}
函数 func() 最后一个参数写成省略号,即三个点号(…),省略号之前的那个参数是 int,代表了要传递的可变参数的总数。为了使用这个功能,您需要使用 stdarg.h 头文件,该文件提供了实现可变参数功能的函数和宏。具体步骤如下:
现在编写一个带有可变数量参数的函数,并返回它们的平均值:
#include
#include
double average(int num,...)
{
va_list valist;
double sum = 0.0;
int i;
/* 为 num 个参数初始化 valist */
va_start(valist, num);
/* 访问所有赋给 valist 的参数 */
for (i = 0; i < num; i++)
{
sum += va_arg(valist, int);
}
/* 清理为 valist 保留的内存 */
va_end(valist);
return sum/num;
}
int main()
{
printf("Average of 2, 3, 4, 5 = %f\n", average(4, 2,3,4,5));
printf("Average of 5, 10, 15 = %f\n", average(3, 5,10,15));
}
当上面的代码被编译和执行后输出结果:
Average of 2, 3, 4, 5 = 3.500000
Average of 5, 10, 15 = 10.000000
执行程序时,可以从命令行传值给 C 程序。这些值被称为命令行参数,它们对程序很重要,特别是当您想从外部控制程序,而不是在代码内对这些值进行硬编码时,就显得尤为重要了。
#include
int main( int argc, char *argv[] )
{
printf("Program name %s\n", argv[0]);
if( argc == 2 )
{
printf("The argument supplied is %s\n", argv[1]);
}
else if( argc > 2 )
{
printf("Too many arguments supplied.\n");
}
else
{
printf("One argument expected.\n");
}
}
既然是要通过命令行传参数,那么就不是在ANJUTA里一键编译了,打开命令行窗口:
which gcc
gcc --version
gcc program.c #这步编译完之后,可以看到生成了一个a.out文件
./a.out testing
The argument supplied is testing
命令行参数是使用 main() 函数参数来处理的,其中,argc 是指传入参数的个数,argv[] 是一个指针数组,指向传递给程序的每个参数。
argv[0]** 存储程序的名称,argv[1] 是一个指向第一个命令行参数的指针,*argv[n] 是最后一个参数。
如果没有提供任何参数,argc 将为 1,否则,如果传递了一个参数,argc 将被设置为 2。
多个命令行参数之间用空格分隔,但是如果参数本身带有空格,那么传递参数的时候应把参数放置在双引号 “” 或单引号 ‘’ 内部
敲重点!菜鸡Ai微信交流群成立
关注公众号,后台回复,进群。
交流方向已涵盖:PyTorch、TensorFlow、MXNET、Unity3D、虚幻、VR、AR、XR、论文投稿&交流、实习Offer、面试面经、算法刷题、NLP、XLNET、ERNIE2.0、BERT系列、目标检测、图像分割、目标跟踪、人脸检测&识别、OCR、姿态估计、SLAM、医疗影像、Re-ID、GAN、自动驾驶、强化学习、模型剪枝&压缩、遥感图像、行为识别、视频理解、图像融合、图像检索等。
一定要备注:研究方向+地点+学校/公司+昵称(如行为识别+北京+北大+小丁),根据格式备注,才能通过且邀请进群