• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >C语言 > C语言的递归思想实例分析

C语言的递归思想实例分析

作者: 字体:[增加 减小] 来源:互联网 时间:2017-05-28

通过本文主要向大家介绍了c语言递归实例,c语言递归算法实例,c语言编程实例题,c语言高级编程实例,c语言应用实例等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

本文实例分析C语言的递归思想,分享给大家供大家参考之用。具体方法如下:

通俗点来说,递归就是自己调用自己。

递归的难点一是理解递归的执行调用过程,二是设置一个合理的递归结束条件。

下面来看一段摘自书中的简单程序:

#include <STDIO.H>
long fact(int n);
long rfact(int n);
int main(void)
{
 int num;
 printf("This program calculates factorials.\n");
 printf("Enter a value in the range 0-12 (q to quit):\n");
 while(scanf("%d",&num)==1)
 {
 if(num<0)
  printf("No negative numbers,please.\n");
 else if (num>12)
 {
  printf("Keep input under 13.\n");
 }
 else
 {
  printf("loop:%d factorial=%d\n",num,fact(num));
  printf("recursion:%d factorial=%d\n",num,rfact(num));
 }
 }
}

long fact(int n)
{
 long ans;
 for (ans=1;n>1;n--)
 {
 ans*=n;
 }
 return ans;
}

long rfact(int n)
{
 long ans;
 if (n>0)
 {
 ans=n*rfact(n-1);
 } 
 else
 {
 ans=1;
 }
 return ans;
}

</div>

该程序用来计算阶乘,分别采用循环和递归实现。用语言来描述一下递归的执行过程吧。
假设计算5!,n=5,分别调用了自己4次,即n分别等于4,3,,2,1。当n等于0时,返回ans=1,这时rfact这个函数才刚刚完整的执行一遍,返回ans=1,

压栈已经完成,开始出栈。

n与ans,分别相乘5次,即ans分别等于1,2,6,24,120(24*5)

即5!=120

我们来看一下n的变化规律:

入栈时,n=5,4,3,2,1,

出栈时,n=1,2,3,4,5

递归实质上就是栈。

往往容易忽略递归条件不满足后,被调函数把控制权转会主调函数,主调函数继续执行剩余的语句这一过程,而造成迷惘。

其实,所有事情都可以用生活中的事情加以解释,就像四大名著相互相通,可以互相解释一样,做一件事情可以不要求甚至不清楚最后的结果,但是一定要明白这件事情是在做什么,明白这件事情来龙去脉,但是不要死钻牛角尖,静心做学问。

感兴趣的朋友可以测试运行本文实例以加深理解,相信本文所述对大家C程序设计的学习有一定的借鉴价值。

</div>
分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • C语言的递归思想实例分析

相关文章

  • 2017-05-28基于errno返回值的对应错误码的详细介绍
  • 2017-05-28一道超经典的C++结构体的题目
  • 2017-05-28C语言实现字符串匹配KMP算法
  • 2017-05-28c语言动态数组示例
  • 2017-05-28C语言中lseek()函数和fseek()函数的使用详解
  • 2017-05-28详解C++中二进制求补运算符与下标运算符的用法
  • 2017-05-28二叉树前序遍历的非递归算法
  • 2017-05-28VC++中进程与多进程管理的方法详解
  • 2017-05-28C语言 表、栈和队列详解及实例代码
  • 2017-05-28基于C语言实现简单的走迷宫游戏

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • tcp socket客户端和服务端示例分享
    • Qt之ui在程序中的使用-多继承法介绍
    • C语言中时间戳转换成时间字符串的方法
    • C++11新特性中auto 和 decltype 区别和联系
    • C++ COM编程之接口背后的虚函数表
    • C/C++产生指定范围和不定范围随机数的实例代码
    • C#将Unicode编码转换为汉字字符串的简单方法
    • C/C++ 公有继承、保护继承和私有继承的对比详解
    • C++中的类模板详解及示例
    • c语言输出字符串中最大对称子串长度的3种解决方案

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有