递归函数及可变参数的几个经典编程练习

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <assert.h>
#include <stdarg.h>
#include "func_test.h"


/*递归函数将输入的整数转换为字符串形势*/
void binary_to_ascii(u32 value)
{
	u32 quotient;

	quotient = value / 10;
	if(quotient != 0)
		binary_to_ascii(quotient);
	putchar( value % 10 + '0');
}

/*可变参数的函数,计算平均值*/
float average(int n_values, ... )
{
	va_list  var_arg;
	int      count;
	float    sum = 0;

	/*从va_start开始访问可变参数*/
	va_start( var_arg , n_values );

	/*添加取自可变参数列表的值*/
	for( count = 0; count < n_values; count += 1)
	{
		sum += va_arg(var_arg , int);
	}

	/*完成处理可变参数*/
	va_end( var_arg );

	return sum / n_values;

}

/*递归函数求厄米多项式*/
int hermite(int n , int x)
{
	if(n <= 0)
	{
		return 1;
	}
	 if(n == 1)
	{
		return 2*x;
	}
	if(n >= 2)
	{
		return (2*x*hermite(n-1 , x) - 2*(n-1)*hermite(n-2,x));
	}
}

/*求两个数的最大公约数*/
int gcd(int M , int N)
{
	int R = 0;
	if((M <= 0) || (N <= 0))
	{
		return 0;
	}

	R = M % N;

	if(R == 0)
	{
		return N;
	}
	else if(R > 0)
	{
		return gcd(N , R);
	}
}

/*ascii to integer,字符串转换为整数*/
int ascii_to_integer( char *string )
{
	u32 result = 0;
	
	while(*string != '\0')
	{
		if(*string >= '0' && *string <= '9')
		{
			result = result * 10 + (*string - '0');

			string++;
		}
		else
		{
			return 0;
		}
	}
	return result;


}

/*编写名为max_list的函数,用于检查任意数目的整形参数并返回它们中的最大值*/
int max_list(n_values , ...)
{
	va_list var_arg;
	int max   = 0;
	int temp  = 0;
	u32 i     = 0;

	va_start(var_arg , n_values);

	for(i = 0; i < n_values; i++ )
	{
		temp = va_arg(var_arg,int);
		if(temp >= max)
		{
			max = temp;
		}
		
	}

	va_end(var_arg);

		return max;
}







int main(void)
{
//	binary_to_ascii(15643);
//	printf("The sum is :%f\n",average(4,8,6,4,8));
//	printf("The hermite value is :%d\n",hermite(4,8));
//	printf("The gcd value is :%d\n",gcd(78,96));
//	printf("The ascii to integer is :%d\n",ascii_to_integer("1678"));
	printf("The max num is :%d\n",max_list(6,1,3,5,2,17,9));
	getch();
	return 0;
}

猜你喜欢

转载自blog.csdn.net/deep_l_zh/article/details/55044390