当前位置: 首页 > article >正文

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

}

 

 

 


http://www.kler.cn/a/468236.html

相关文章:

  • 渗透测试--Web基础漏洞利用技巧
  • 【数电尾灯设计】2022-8-16
  • 【动态重建】时间高斯分层的长体积视频
  • 苍穹外卖 项目记录 day03
  • nacos安装集群
  • 安卓漏洞学习(十七):维京海盗-Strandhogg漏洞
  • 【linux基础I/O(1)】文件描述符的本质重定向的本质
  • 解决HBuilderX报错:未安装内置终端插件,是否下载?或使用外部命令行打开。
  • SQL Server 的备份机制及其恢复实现
  • 利用轮换IP的强大功能
  • CSS系列(49)-- Relative Color Syntax详解
  • Postgresql中clog与xid对应关系计算方法(速查表)
  • lua库介绍:数据处理与操作工具库 - leo
  • k8s 镜像拉取策略
  • 计算机组成原理——控制单元设计
  • 青少年编程与数学 02-005 移动Web编程基础 13课题、本地存储
  • 洛谷:P1540 [NOIP2010 提高组] 机器翻译
  • Sqoop其二,Job任务、增量导入、Hdfs导入、龙目
  • 【Unity3D】遮挡剔除 Occlusion
  • linux安装redis及Python操作redis
  • 嵌入式linux系统中CMake的基本用法
  • C# OpenCV机器视觉:霍夫变换
  • 社群团购平台的运营模式革新:以开源AI智能名片链动2+1模式商城小程序为例
  • HTML——74. 表单实战
  • 算法练习——分治_快排
  • 在k8s中部署Elasticsearch高可用集群详细教程