c语言函数的递归

函数的递归

什么是递归?

程序调用自身的编程技巧称为递归。递归作为一种算法的程序设计,语言中广泛应用一个过程或函数,在其定义或说明中有直接或间接调用自身的一种方法。它通常把一个大型复杂的问题。层层转化为一个与原问题相似的规模较小的问题来求解递归策略。只需少量的程序就可描述出解题过程中所需要的多次重复计算,大大地减少了程序的代码量。递归的主要思考方式在于把大事化小

 递归的两个必要条件

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

一个简单的递归案例:(图解)

c语言函数的递归_第1张图片

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

//递归打印123
#include
void print(int n)
{
	if(n>9)
	{
		print(n/10);
	}
	printf("%d ",n%10);
}
int main()
{
	unsigned int num = 0;
	scanf("%d",&num);   //输入123
	print(num);
    return 0;
}

 c语言函数的递归_第2张图片

 

图解分析:

c语言函数的递归_第3张图片 

 

案例:不考虑输入临时变量,打印字符串的长度即自己写一个函数求字符串的长度,不利用库函数strlen

这里是自己写的my_strlen函数,但是由于不要临时变量,还需要将自定义函数更改,使用递归

//不考虑输入临时变量,打印字符串的长度即自己写一个函数求字符串的长度,不利用库函数strlen

#include
int my_strlen(char* str)  // 形参接收一个地址类型的符号,返回类型是int
{
	int count =0;
	while(*str!='\0')
	{
		count++;
		str++;
	}
	return count;
}
int main()
{
	char arr[]="hello";
	int len = my_strlen(arr); //arr是数组。数组传参,传过去的不是整个数组,而是一个元素的地址。 
	printf("len=%d\n",len);
	return 0;
}

进行更改:

#include
int my_strlen(char* str)  // 形参接收一个地址类型的符号,返回类型是int
if(*str !='\0')
		return 1+my_strlen(str+1);  //*str解引用,代表指针指向的内容,str是指针变量,是针
	else
		return 0;
}
int main()
{
	char arr[]="bit";
	int len = my_strlen(arr); //arr是数组。数组传参,传过去的不是整个数组,而是一个元素的地址。 
	printf("len=%d\n",len);
	return 0;
}

图解:

c语言函数的递归_第4张图片

c语言函数的递归_第5张图片 

 

你可能感兴趣的:(算法,c语言,开发语言)