龙空技术网

我的C语言学习日记07——函数递归

大家好我是小小白 107

前言:

如今咱们对“c语言函数递归调用”大约比较珍视,你们都想要知道一些“c语言函数递归调用”的相关资讯。那么小编在网上搜集了一些对于“c语言函数递归调用””的相关资讯,希望你们能喜欢,大家一起来学习一下吧!

函数递归

把大事化小

递归的两个必要条件

存在限制条件,当满足这个限制条件的时候,递归便不在继续每次递归调用之后越来越接近这个限制条件

​​

int main(){	printf("hehe\n");	main();	return 0;//循环一段时间后报错:stack overflow栈溢出}

​​

​​练习接受一个整型值(无符号),按照顺序打印它的每一位

void print(int n)//定义函数{	if (n > 9)//如果是两位数以上就调用函数,一位数就跳出打印	{		print(n / 10);//拆除n的末位数字在递归调用函数//定义函数到此处相当于循环体	}	printf("%d ", n % 10);//一位数打印本身,多位数打印末位数}int main(){	unsigned int num = 0;	scanf("%d", &num);	print(num);//调用函数	return 0;}

​​

​​编写函数不允许创建临时变量,求字符串的长度

int my_strlen(char* str)//循环计数{	int count = 0;//创建了临时变量,不符合要求	while (*str != '\0')//遇到\0就停止计数	{		count++;//长度加一		str++;//元素的地址后移一位	}	return count;}int main(){	char arr[] = "bit";//数组元素包括b i t \0	int len = 0;	len = my_strlen(arr);//数组只能传递首元素的地址	printf("len=%d\n", len);	return 0;}

​用递归改进

 //大事化小 //my_strlen("bit"); //1+my_strlen("it"); //1+1+my_strlen("t"); //1+1+1+my_strlen(""); //1+1+1+0=3int my_strlen(char* str)//               }{                      //                |→相当于循环体	if (*str != '\0')    //              |		return 1 + my_strlen(str + 1);// }	else		return 0;}int main(){	char arr[] = "bit";	int len = 0;	len = my_strlen(arr);	printf("len=%d\n", len);	return 0;}
​递归与迭代循环求n阶乘

int Fac(int n){	int i = 0;	int ret = 1;	for (i = 1; i <= n; i++)	{		ret *= i;	}	return ret;}int main(){	int n = 0;	int ret = 0;	scanf("%d", &n);	ret = Fac(n);	printf("%d\n", ret);	return 0;}

递归求n的阶乘

int Fac(int n){	if (n <= 1)		return 1;	else		return n*Fac(n - 1);}int main(){	int n = 0;	int ret = 0;	scanf("%d", &n);	ret = Fac(n);	printf("%d\n", ret);	return 0;}

​递归求第n个斐波那契数列

int Fib(int n){	if (n <= 2)		return 1;	else		return Fib(n - 1) + Fib(n - 2);}int main()//斐波那契数列是前两个数字的和等于第三个数字{          //前两个数都是1	int n = 0;	int ret = 0;	scanf("%d", &n);	ret = Fib(n);	printf("%d\n", ret);	return 0;//效率太低}

​用循环实现

int Fib(int n){	int a = 1;	int b = 1;	int c = 1;	while (n > 2)//必须知道前两个数才能算斐波那契数列,都为1	{		c = a + b;		a = b;		b = c;		n--;//例n=4则需要循环求2两次,当n=4一次,当n=3一次	}	return c;}int main(){          	int n = 0;	int ret = 0;	scanf("%d", &n);	ret = Fib(n);	printf("%d\n", ret);	return 0;//效率很高}

​递归和循环根据情况选取

标签: #c语言函数递归调用 #递归法求n的阶乘c语言 #c语言两位数 #c语言日志怎么写 #c语言中递归处理顺序