目录
前言
函数的递归思想是编程中的重要思想,但是对于初学者来说较难掌握,本文就通过一些简单的例题来让初学者了解什么是函数的递归
一、函数递归是什么?
简单来说,函数自己调用自己就被称为函数的递归。而递归包括两部分,递推和回归,这种编程思想是将一件很复杂的大兴问题层层转化为与原问题解决思路相似的规模较小的问题去解决。
二、例题
例1.
接受一个整型值(无符号),按照顺序打印它的每一位。
例如:
输入:
1234
,输出
1 2 3 4
思路分析:
首先,我们接收到一个整型值的时,想得到最后一位是很简单的,只用进行取余操作。
所以,我们把打印1234这件事拆分成先打印出123,然后在打印4,
同理,打印123拆分为先打印12,然后再打印3,
把打印12拆分为打印1,在打印2.
然后打印1是很容易就能完成的。
![](https://i-blog.csdnimg.cn/blog_migrate/83b72f5998d87c46ad0e65cd7f30a96d.png)
代码实现
#include<stdio.h>
void Print(int n)
{
if(n>9)//如果n是两位数就要拆分
{ Print(n/10);}
printf("%d ",n%10);
}
int main()
{
int n=0;
scanf("%d",&n);
Print(n);
return 0;
}
详细图解
这就是递归详细执行的情况。
例2.
编写函数不允许创建临时变量,求字符串的长度。
思路分析:
假设我们有一个字符串"abcdef",由于字符串以“/0”结尾,如果首字符不是“/0”,那么整个字符串的长度为就为1+除首字符后的字符串长度
#include<stdio.h>
int my_strlen(char* str)
{
if(*str!="/0")
return 1+my_strlen(str+1);
else
return 0;
}
int main()
{
char arr[]="abcdef";
int len=my_strlen(arr);
printf("%d\n",len);
return 0;
}
总结
以上就是今天要讲的内容,本文仅仅通过了两个简单的例题为初学者介绍了函数递归的思路以及运用,而函数递归还有很多更加复杂的问题,例如汉诺塔以及斐波那契额数列问题,同时函数递归虽然简化了代码,但是也会带来一些难以预料的问题,大家感兴趣可以详细了解一下,下次我们再来深入讨论这些复杂的问题。