/*************************************************************************
> File Name: func.c
> Author: khalil
> Mail: hsgwpj@gmail.com
> Created Time: Wed 11 Nov 2015 02:20:41 PM CST
************************************************************************/
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
//可变参函数 *一般不推荐使用
#include<stdarg.h>
//可变参需要这个库函数
/*
* 在函数参数传递中:
*
* 1.类型一致;
* 2.参数个数相同;
* 3.参数传递顺序要一致;
*
* printf 是一个可变参函数
*
* va_list 是一个char *类型的指针
* va_start va_end va_arg是宏
*
* 用法如下
* */
#if 1
int sum(int num, ...);
int sum(int num, ...)
{
va_list args ;
int result = 0;
int i = 0;
va_start(args, num);
for (i = 0; i < num; ++i){
result += va_arg(args, int);
}
va_end(args);
return result;
}
int main (int argc, char **argv)
{
printf("hello, %s","world!\n");
printf("result = %d\n", sum(3, 100, 200, 300, 400, 500));
return 0;
}
#endif
#if 0
// 递归函数
// eg:归并排序的时间复杂度是 O(log2(n) * n) 它的排序过程是递归的过程
int jiecheng(int num);
int jiecheng(int num)
{
//1.什么时候进行递归
//2.什么时候结束递归
//3.递归函数写法上的特点:多个结果的返回结合
// 5! = 5 * 4! = 5 * 4 * 3! ...(递归思想)
// 5! = 5 * 4 * 3 * 2 * 1 (迭代思想)
if (num < 0){
return 0;
}else if (num == 0 || num == 1){
return 1;
}
return num * jiecheng(num - 1);
}
int jiecheng2(int num);
int jiecheng2(int num)
{
//迭代
int i = 0;
int result = 1;
for (i = 1; i <= num; ++i ){
result *= i;
}
return result;
}
int main (int argc, char **argv)
{
printf("5! = %d\n",jiecheng(5));
return 0;
}
#endif
#if 0
void print_array1(int *array, int len);
void print_array1(int *array, int len)
{
int i = 0;
if (array != NULL && len > 0){
for (i = 0; i < len; ++i){
printf("%d ",array[i]);
}
}
printf("\n");
}
void print_array2(int *array, int len);
void print_array2(int *array, int len)
{
if ( len == 0 ){
printf("\n");
return;
}
printf("%d ", *array);
print_array2(array + 1, len - 1);
}
int get_index(int *array, int len, int tar);
int get_index(int *array, int len, int tar)
{
if (len == 0){
printf("not found!\n");
return -1;
}
if (tar == array[len - 1]){
printf("index of %d is:%d", tar, len - 1);
return len - 1;
}
get_index(array, len - 1, tar);
}
int main(int argc, char **argv)
{
int array[] = {12, 23, 34, 56, 78, 90, 100};
int len = sizeof(array) / sizeof(array[0]);
print_array1(array, len);
print_array2(array, len);
get_index(array, len, 100);
return 0;
}
#endif