我的编程空间,编程开发者的网络收藏夹
学习永远不晚

C语言中递归的实际应用与经典问题

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

C语言中递归的实际应用与经典问题

一、什么是递归

递归简单的来说就是在函数中调用自己

它通常把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解,递归策略只需少量的程序就可描述出解题过程所需要的多次重复计算,大大地减少了程序的代码量。

递归的两个必要条件:

存在限制条件,当满足这个限制条件的时候,递归便不再继续。

每次递归调用之后越来越接近这个限制条件。

二、递归模板


void recursion(参数0) 
{
    if (终止条件)
    {
        return;
    }
    else
    {
        recursion(参数1)
    }
}

三、递归的实际应用

1.阶乘递归


int tmp(int n)
{
	if (n == 1)
	{
		return 1;
	}
	else
	{
		return n*tmp(n - 1);
	}
}

2.斐波那契数列

斐波那契数列指的是这个数列从第3项开始,每一项都等于前两项之和。

递归算法:


int fibonacci(int n)
{
	if (n<=2)
		return 1;
	else
	{
		return fibonacci(n - 1) + fibonacci(n - 2);
	}
}

非递归方法:


int fibonacci(int n)
{
	int a = 1;
	int b = 1;
	int c = 1;
	while (n > 2)
	{
		c = a + b;
		a = b;
		b = c;
		n--;
	}
	return c;
}

四、递归的经典问题

汉诺塔问题

汉诺塔问题来源:

汉诺塔(又称河内塔)问题是源于印度一个古老传说的益智玩具。大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘。大梵天命令婆罗门把圆盘从下面开始按大小顺序重新摆放在另一根柱子上。并且规定,在小圆盘上不能放大圆盘,在三根柱子之间一次只能移动一个圆盘。

这里我们使用的方法是从特殊到一般,这也是数学问题中常用的方法。

首先我们设计一个盘,那就直接把这个盘从自身柱子移到目标柱。

其次我们看两个盘,三根柱子两个盘,先将上面的柱子移动到中间柱,然后将最下面的柱子移动到目标柱,最后中间的柱子。

再来看多个盘


void hanno(int n, char a, char b, char c)
{
	if (n == 1)
	{
		printf("%c->%c\n", a, c);
	}
	else
	{
		hanno(n - 1, a, c, b);//递归处理,一开始的时候,先将n-1个盘子移至过渡柱z上后再将最底下的大盘子直接移至目标柱子y
		printf("%c->&c\n", a, c);
		hanno(n - 1, b, a, c);//然后重复以上步骤,递归处理放在过渡柱z上的n-1个盘子,
	}
}

青蛙跳台阶

一只青蛙可以一次跳 1 级台阶或一次跳 2 级台阶,例如:跳上第一级台阶只有一种跳法:直接跳 1 级即可。跳上两级台阶,有两种跳法: 每次跳 1 级,跳两次; 或者一次跳 2 级.问要跳上第 n 级台阶有多少种跳法?

解题思路

我们设台阶数位N;

当N=1时,当然只有1种跳法;

当N=2时,青蛙可以跳2次1层和跳1次2层;

当N=3时,当有3层台阶时,青蛙可以选择先跳1层,剩下2层台阶,所以此时就是有2层台阶时的跳法,有2种;当青蛙选择第一次跳2层台阶时,剩下1层台阶,此时有1层台阶时的跳法,所以3层台阶时的方法是:2层台阶的方法 + 1层台阶的方法。


#include<stdio.h>
int frog(int n)
{
   if(n == 1)
   {
      return 1;
   }
   if(n == 2)
   {
      return 2;
   }
   return frog(n-1) + frog(n-2);
}
int main()
{
   int n;
   scanf("%d",&n);
   int ways = frog(n);
   printf("%d\n",ways);
   return 0;
}

总结

到此这篇关于C语言中递归的实际应用与经典问题的文章就介绍到这了,更多相关C语言中递归应用内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

C语言中递归的实际应用与经典问题

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

C语言递归在实践题目中如何应用

本篇内容主要讲解“C语言递归在实践题目中如何应用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“C语言递归在实践题目中如何应用”吧!递归知识点递归概念:程序调用自身的编程技巧称为递归( recur
2023-06-30

C++ 函数的递归实现:尾递归在实际应用中的示例?

c++++中的尾递归优化:尾递归是一种函数在调用自身后立即返回的优化技术。通过指定noinline关键字,可在c++中实现尾递归,提高性能。实战案例:使用尾递归计算阶乘,该阶乘定义为从1乘到给定数字的正整数的乘积。C++ 函数的递归实现:深
C++ 函数的递归实现:尾递归在实际应用中的示例?
2024-04-22

C++ 函数的递归实现:递归在语言分析中的应用示例?

递归是一种函数在自身内部调用自身的编程范式。在 c++++ 中,可使用 operator() 运算符实现递归。递归在语言分析中可用作分析嵌套结构的工具,例如识别括号序列的合法性:如果序列为空,则合法。如果序列以左括号开头,则合法,只要序列以
C++ 函数的递归实现:递归在语言分析中的应用示例?
2024-04-22

C语言中如何使用递归解决青蛙跳台阶问题

这篇文章主要介绍C语言中如何使用递归解决青蛙跳台阶问题,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!一、求解思路台阶的数量为n。当 n = 1 时,青蛙有一种跳法,即跳1级台阶。当 n = 2 时,青蛙有两种跳法,即
2023-06-25

C语言 volatile与const同时使用应注意的问题

“volatile”的含义是“请不要做没谱的优化,这个值可能变掉的”,而并非“你可以修改这个值”。因此,它们本来就不是矛盾的
2022-11-15

方法与函数在Go语言中的区分及实际应用

方法和函数是 go 语言的基本结构,两者差异如下:方法有接收者类型,而函数没有。方法与接收器值绑定,而函数与调用者无关。方法可访问接收者类型私有成员,而函数只能访问公开成员。函数适用于通用操作,而方法适用于特定类型操作,最佳实践是优先使用函
方法与函数在Go语言中的区分及实际应用
2024-04-03

如何使用C语言处理算经中的百钱百鸡问题

这篇文章主要介绍了如何使用C语言处理算经中的百钱百鸡问题,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。1. 问题描述中国古代数学家张丘健在他的 《算经》 中提出了一个著名的
2023-06-29

C语言中static关键字的实际应用场景及使用技巧

C语言中static关键字的实际应用场景及使用技巧一、概述static是C语言中的一个关键字,用于修饰变量和函数。它的作用是改变其在程序运行过程中的生命周期和可见性,使得变量和函数具有静态的特性。本文将介绍static关键字的实际应用场景
C语言中static关键字的实际应用场景及使用技巧
2024-02-22

Go语言在区块链应用开发中的关键技术与实践经验分享

Go语言在区块链应用开发中的关键技术与实践经验分享随着区块链技术的不断发展和普及,越来越多的开发者开始关注并使用Go语言来开发区块链应用。作为一种效率高、性能优越的编程语言,Go语言在区块链领域具有独特的优势。本文将通过分享关键技术和实践
Go语言在区块链应用开发中的关键技术与实践经验分享
2024-03-10

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录