初识C语言之函数的递归

一初识递归

++1.递归的概念++:函数自己调用自己。

++2.递归的作用++:将一个复杂大型的问题层层转化为一个和原问题相似,但规模较小的子问题。来求解,直到子问题不可被拆分。

++3.限制条件++:每次递归调用之后,都会越来越接近该限制条件。

++4.举例:++

此次举一个错误的例子来方便理解:

int main ( )

{

printf("hehe");

main ( ); //再次调用main函数

return 0;

}

上述代码的效果为无限次的打印hehe。

上述代码错误的原因是:每次函数调用都会为此次函数调用分配内存空间,此空间是内存中的栈区。如果无限次的递归,便会将栈区的空间使用完,这时便会出现栈溢出(stack overflow)的问题。

二.函数递归实践的举例:

++1.举例一++:求n的阶乘。

分析: n !=n*(n-1) !

设计一个函数可以计算n的阶乘,第一次调用传n的参数,然后将n-1作为参数传给函数。让函数自己调用自己,达到递归的目的。

实践:

int Fact(int n)//定义一个函数,用来计算n的阶乘

{

if(n==1)//当n为1时

return 0;//返回值为0

if(n>0)//当n大于零时

return n*Fact (n-1);//用函数递归调用函数自己

}

int main()

{

int n=0;

scanf("%d",&n);

int r=Fact(n);//调用函数

printf("%d",r);

return 0;

}

2.举例二:顺序打印出整数的每一位

void print ( int n)//定义一个函数print参数为n

{

if(n>9)//如果n大于9时,调用print函数自己,传入的参数为n/10

{

print(n/10);

}

printf("%d",n%10);//打印n对10求余的结果

}

int main()

{

int n=0;

scanf("%d",&n);

int r=print(n);//调用print函数

return 0;

}

3.举例三:求出第n个斐波那契数

题目描述:斐波那契数列:1 1 2 3 5 8 13 21 34

题目分析:Fib(n)

当n≤2时,等于1。

当n>2时,等于Fib(n-1)+Fib(n-2)

代码实践:

int Fib (int n)

{

if(n<=2)//当n大于等于2结果返回值为1

return 1;

else

return Fib(n-1)+Fib(n-2);//其他情况调用Fib函数

}

int main ( )

{

int n =0;

scanf("%d",&n);

int r=Fib(n);//调用函数Fib

printf("%d",r);

return 0;

}

相关推荐
MediaTea3 分钟前
<span class=“js_title_inner“>Python:实例对象</span>
开发语言·前端·javascript·python·ecmascript
热爱编程的小刘12 分钟前
Lesson04---类与对象(下篇)
开发语言·c++·算法
毕设源码-朱学姐15 分钟前
【开题答辩全过程】以 基于Java的九价疫苗预约系统为例,包含答辩的问题和答案
java·开发语言
闵帆18 分钟前
反演学习器面临的鸿沟
人工智能·学习·机器学习
雨季66624 分钟前
Flutter 三端应用实战:OpenHarmony “微光笔记”——在灵感消逝前,为思想点一盏灯
开发语言·javascript·flutter·ui·dart
yugi98783825 分钟前
遗传算法优化的极限学习机模型(GA-ELM)Matlab实现
开发语言·matlab
梦梦代码精38 分钟前
开源、免费、可商用:BuildingAI一站式体验报告
开发语言·前端·数据结构·人工智能·后端·开源·知识图谱
郝学胜-神的一滴1 小时前
Linux网络编程之listen函数:深入解析与应用实践
linux·服务器·开发语言·网络·c++·程序人生
焱童鞋1 小时前
解决 MeteoInfoLab 3.9.11 中 contourfm 导致的 ArrayIndexOutOfBoundsException
开发语言·python
EnglishJun1 小时前
数据结构的学习(二)---Makefile的使用
linux·运维·学习