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

}

相关推荐
科雷软件测试4 小时前
Python中itertools.product:快速生成笛卡尔积
开发语言·python
OOJO5 小时前
c++---list介绍
c语言·开发语言·数据结构·c++·算法·list
笨笨饿6 小时前
29_Z变换在工程中的实际意义
c语言·开发语言·人工智能·单片机·mcu·算法·机器人
Amazing_Cacao7 小时前
深度观察 | 从“产区玄学”到“液态战场”:精品巧克力的终极试金石
学习
艾为电子7 小时前
【技术帖】让接口不再短命:艾为 C-Shielding™ Type-C智能水汽防护技术解析
c语言·开发语言
棉花骑士7 小时前
【AI Agent】面向 Java 工程师的Claude Code Harness 学习指南
java·开发语言
IGAn CTOU7 小时前
PHP使用Redis实战实录2:Redis扩展方法和PHP连接Redis的多种方案
开发语言·redis·php
环黄金线HHJX.8 小时前
TSE框架配置与部署详解
开发语言·python
Vfw3VsDKo8 小时前
Maui 实践:Go 接口以类型之名,给 runtime 传递方法参数
开发语言·后端·golang
深蓝海拓8 小时前
S7-1500PLC学习笔记:MOVE_BLK、MOVE_BLK_VARIANT、BLKMOV的区别
笔记·学习·plc