C语言递归+函数

1.自定义函数
ret_type fun_name(para1,*)   //ret_type返回类型 fun_name函数名 para1函数参数

     statement;//语句项
}   //在main函数中,调用函数时,要传几个变量过去就在函数括号中输入几个,

                                                        同时在定义函数  时也要接收相应的函数参数

例子:二分查找法

int binary_search(int arr[], int k,int sz)//该处的arr是一个指针(存储地址)
{
	//int sz = sizeof(arr) / sizeof(arr[0]);//在计算指针大小时64位下大小为8,因此该处的sz结果 
                         //为1,因此在该处计算的元素个数不正确,要在main函数中计算好后传给形参
	int left = 0;
	int right = sz - 1;
	
	while (left <= right)
	{
		int ret = (left + right) / 2;//在while循环外就得不到重置,ret会始终保持初始值,因此无 
                                                                              //法出结果
		if (arr[ret] > k)
		{
			right = ret - 1;
		}
		else if (arr[ret] < k)
		{
			left = ret + 1;
		}
		else
		{
			return ret;
		}
	}
	return 1;
}
int main()
{
	int arr[] = { 1,2,3,4,5,6,7,8,9,10 };
	int k = 7;
	int sz = sizeof(arr) / sizeof(arr[0]);
	int sum= binary_search(arr, k,sz);//数组在传参的时候,只是传了数组中第一个元素的地址
	if (sum == 1)
	{
		printf("找不到指定下标\n");
	}
	else
	{
		printf("找到了,下标是:%d\n", sum);
	}
	return 0;
}

形参:函数名后括号中的变量,形式参数只有在被函数调动的过程中才被实例化,受实参控制,实参无传值时,形参无值,只在函数中有效。形参实例化时是实参的一分拷贝

实参:真实传给函数的参数,可以是常量,变量,表达式,函数等,无论实参为何种类型,在进行函数调动时,实参都要有确定的值传给形参

传址调用:把函数外部创建的内存地址传递给函数参数的一种调用函数形式,可以让函数和函数外的变量建立起真正的联系,也就是函数内部可以直接操作函数外部的变量,用于想在函数内部对函数外部进行操作


嵌套调用:函数之间可以套娃


链式访问:一个函数的返回值可以作为另一个函数的参数


引用自己创建的文件,头文件写法为:#include"文件名.h"


函数的声明放在.h文件中,函数的定义放在.c中(分解编程步骤)
函数要先声明后使用,放于头文件中
函数定义是函数的具体实现,交代函数的功能实现

2. 递归:

大事化小 将大问题化为多个相等的小问题,重复解决小问题以完成大问题。。可以用数列的递推公式思想解决
 常见错误   stack overflow栈溢出
 递归两个必要条件
 1.存在限制条件,当满足这个条件的时候,递归便不再继续
 2.每次递归调用后都越来越接近这个条件

例子:strlen函数的实现

int my_srtlen(char* sty)//递归计算字符长度
{
	if (*sty != '\0')
	{
		return 1 + my_srtlen(sty + 1);  
	}
	else
	{
		return 0;
	}
}
int main()
{
	char arr[] = "hello world";
	int let = my_srtlen(arr);
	printf("let=%d", let);
	return 0;

}


 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值