c语言练习8.9--(递归)

递归:自己调用自身 把大事化小

 递归的两个必要条件:
 递归的两个限制条件,当满足这个限制条件的时候,递归便不再继续
 每次递归调用后越来越接近限制条件

先写一个最简单递归函数

int main()
{
    printf("hehe\n");
    main();//一直递归 栈溢出   stackoverflow
    return 0;
}

练习1.接受一个整型值(无符号),按照顺序打印它的每一位。 例如:输入1234  输出1 2 3 4

void print(int n)
{
	if (n > 9)
	{
		print(n / 10);
	}
	printf("%d ", n % 10);
}
int main()
{
	unsigned int num = 0; //unsigned  则只能取正值,不能取负值
	scanf("%d", &num);//1234
	//递归
	print(num);
	//print(1234)
	//print(123) 4
	//print(12) 3 4
	//print(1) 2 3 4
	return 0;
}

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

//int my_strlen(char*str)
//{
//    int count = 0;
//    while(*str != '\0')
//    {
//        count++;
//        str++;
//    }
//    return count;
//}

//递归的方式
 int my_strlen(char*str)
{
     if (*str != '\0')//没有创建临时变量
         return  1 + my_strlen(str + 1);  //向下传递 向上返回
     else
         return 0;
}
 //把大事化小
  //my_strlen("bit")
 //1+my_strlen("it")
 //1+1+ my_strlen("t")
 //1+1+1+ my_strlen("")
 //1+1+1+0
 //3
int main()
{
    char arr[] = "bit";
    //int len = strlen(arr);//求字符串长度
    //printf("%d\n", len);
    //模拟实现一个strlen函数
    int len = my_strlen(arr);//arr是数组,数组传参,传过去的不是整个数组,而是第一个元素的地址
    printf("%d\n", len);
    return 0;
}

 

 

练习3.求n!


int Fac1(int n)
{
	int i = 0;
	int ret = 1;
	for (i = 1; i <= n; i++)
	{
		ret = ret * i;
	}
	return ret;
}
int main()
{
	int i = 0;
	int n = 0;
	scanf("%d", &n);
	int ret =Fac1(n);//循环的方式
	printf("%d\n", ret);
	return  0;
}
 
递归的方法
Fac(n) n<=1 1   n>1 n*Fac(n-1)
int Fac2(int n)
{
	if (n <= 1)
		return 1;
	else
		return   n * Fac2(n - 1);
}
int main()
{
	int i = 0;
	int n = 0;
	scanf("%d", &n);
	int ret = Fac2(n);//循环的方式
	printf("%d\n", ret);
	return  0;
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值