学习笔记五

文章介绍了如何使用递归函数在C语言中实现两个功能:一是将数字拆分并输出,二是不创建临时变量计算字符串长度。递归的核心是将大问题分解为小问题,避免栈溢出的关键在于设置正确的结束条件。示例代码展示了递归在实际问题中的应用。
摘要由CSDN通过智能技术生成

跟着鹏哥学编程,拿一个好offer。

今天学习函数递归(函数自己调用自己),要注意递归常见错误,就是栈溢出(stack overflow)。因为函数调用占用的内存是在栈区,如果递归一直循环,没有结束条件,就会溢出。

1.输入一个数字,比如1234,输出1 2 3 4,用函数递归实现。
递归函数核心思想是大事化小:(输入1234,输出1 2 3 4)
第一步:将1234分成123 4
第二步:将123分成12 3
第三步:将12分成1 2,
第四步:分解完成,顺序输出1 2 3 4

#include <stdio.h>

void print(int n)//实参num传给n
{
	if (n > 9)
	{
		print(n/10);
	}
	printf("%d ",n%10);
}

int main()
{
	unsigned int num = 0;
	scanf("%d",&num);//1234
	print(num);
	return 0;
}

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

心中明确递归函数核心思想:大事化小。

例如要求字符串为arr="bit\0",定义函数my_strlen(char* str)求字符串长度,即my_strlen("bit\0")

判断第一个字符不是'\0',则返回1+my_strlen("it");

调用my_strlen(char* str)函数,判断第二个字符不是'\0',则返回1+1+my_strlen("t");直到遇到'\0',终止递归。

#include <stdio.h>
//递归的方法:把大事化小
/*
my_strlen("bit");
1+my_strlen("it");
1+1+my_strlen("t");
1+1+1+my_strlen("\0");
1+1+1+0
=3
*/
int my_strlen(char* str)
{
	if (*str != '\0')
	{
		return (1 + my_strlen(str+1));
	}
	else
		return 0;
}

int main()
{
	char arr[] = "bit";
	//int len = strlen(arr);//求字符串长度
	//printf("%d",len);
	//模拟实现了一个strlen函数
	int len = my_strlen(arr); //arr是数组,数组传参,传过去的不是整个数组,而是第一个元素的地址
	printf("len = %d\n",len);
	return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值