初识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;

}

相关推荐
许彰午7 小时前
95_Python内存管理与垃圾回收
开发语言·python
多加点辣也没关系8 小时前
JavaScript|第13章:原始类型的方法
开发语言·javascript·ecmascript
এ慕ོ冬℘゜8 小时前
深入理解 JavaScript 事件体系:Window、鼠标与键盘事件详解
开发语言·javascript·okhttp
chouchuang9 小时前
day-030-综合练习-笔记管理器
开发语言·笔记·python
云空10 小时前
《Three.js 3D实例大全》
开发语言·javascript·3d·three.js
techdashen10 小时前
Go 1.26 新增 `bytes.Buffer.Peek`:只看数据,不移动读取位置
开发语言·后端·golang
C137的本贾尼11 小时前
第七篇:消息队列(MQ)——就是个带存储的异步通信管道
java·开发语言·中间件
从零开始的代码生活_12 小时前
C++ list 原理与实践:双向链表、迭代器与简化实现
开发语言·c++·后端·学习·算法·链表·list
无相求码12 小时前
罪魁祸首:for 括号后面那个"隐形分号"
c语言
hy.z_77712 小时前
【C语言】11. 深入理解指针1
c语言·开发语言