c++详解递归算法-全网最全+例题讲解

这篇具有很好参考价值的文章主要介绍了c++详解递归算法-全网最全+例题讲解。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

什么是递归?

递归的思想是什么?

什么时候该用递归?

使用递归需要注意哪些问题?

递归思想解决经典问题

递归和循环的区别是什么?

c++递归,算法,开发语言,c++,数据结构,Powered by 金山文档

递归算法:

定义:直接或间接地出现对自身的调用

本质:递归即递进回归,基本思想就是把规模大的问题转化为规模小的相似的子问题来解决。但必须有一个结束条件(递归出口)

利用递归完成的题目特点:

  1. 可以将当前问题转换成规模更小的问题,且新问题和原问题解法完全相同

  1. 有一个明确的递归边界

例题1 数列1 2 3 4 5 6 7…………,代码实现输入一个数n,输出数列第n项的值。

#include<bits/stdc++.h>
using namespace std;
//求数列1,2,3,4……的第n项
int f(int n)
{
    if(n==1)
        return 1;
    else
        return f(n-1)+1;
}
int main()
{
    int n;
    cin>>n;
    printf("%d",f(n));
    return 0;
}

解释:递归关系:f(n-1)+1,递归出口:1;

例题2:数列1 3 5 7 9……代码实现输入一个数n,输出数列第n项的值。

#include<bits/stdc++.h>
using namespace std;
int f(int n)
{
    if(n==1)
        return 1;
    else
        return f(n-1)+2;
}
int main()
{
    int n;
    cin>>n;
    printf("%d",f(n));
    return 0;
}

解释:递归关系:f(n-1)+2,递归出口:1;

c++递归,算法,开发语言,c++,数据结构,Powered by 金山文档

例题3:斐波那契数列:1,1,2,3,5,8,13,21,34,55,89…

代码实现

#include<bits/stdc++.h>
using namespace std;
int f(int n)
{
    if(n==1||n==2)
        return 1;
    else
        return f(n-1)+f(n-2);
}
int main()
{
    int n;
    cin>>n;
    printf("%d",f(n));
    return 0;
}

解释:递归关系:f(n-1)+f(n-2),递归出口:f(1)=1,f(2)=1;

例4:用递归方法求:1+2+3+……+n=

代码实现:文章来源地址https://www.toymoban.com/news/detail-733587.html

#include<bits/stdc++.h>
using namespace std;
int f(int n)
{
    if(n==1)
        return 1;
    else
        return f(n-1)+n;
}
int main()
{
    int n;
    cin>>n;
    printf("%d",f(n));
    return 0;
}

解释:递归关系:f(n-1)+n,递归出口:1;

例5

c++递归,算法,开发语言,c++,数据结构,Powered by 金山文档

代码实现:

#include<bits/stdc++.h>
using namespace std;
int f(int n)
{
    if(n==1)
        return 2;
    else
        return f(n-1)+n;
}
int main()
{
    int n;
    cin>>n;
    printf("%d",f(n));
    return 0;
}

解释:递归关系:f(n-1)+n,递归出口:n=1;

先列举几项就会发现规律

第一刀2

第二刀2+2=4

第三刀 4+3=7

第四刀 7+4=11

……

第n-1刀 i

第n刀 i+n

如图

c++递归,算法,开发语言,c++,数据结构,Powered by 金山文档

例6

杨辉三角

c++递归,算法,开发语言,c++,数据结构,Powered by 金山文档
#include<bits/stdc++.h>
using namespace std;
int f(int x,int y)
{
    if(y==0||x==y)
        return 1;
    else
        return f(x-1,y-1)+f(x-1,y);
}
int main()
{
    int x,y;
    cin>>x>>y;
    printf("%d",f(x,y));
    return 0;
}
c++递归,算法,开发语言,c++,数据结构,Powered by 金山文档

用递归方法求:两个数的最大公约数

最大公约数就是两个数中,大家都能相约的数

辗转相除法

又名欧几里得算法,目的是求出两个正整数的最大公约数。它是最古老的算法,其可追溯刀公元前300年前。

这条算法基于一个定理:两个正整数a和b(a>b),他们的最大公约数等于a除以b的余数c和较小数b之间的最大公约数。

例7求两个数的最大公约数

方法1:非递归法

int gcd(int a,int b)
{int r=a%b;
while(r!=0)
{
a=b;
b=r;
r=a%b;
}
return b;
}

方法2 递归法

#include<bits/stdc++.h>
using namespace std;
int gcd(int a,int b)
{
    int r=a%b;
    if(r==0) return b;
    return gcd(b,r);
}
int main()
{
    int b,r;
    cin>>b>>r;
    printf("%d",gcd(b,r));
    return 0;
}

例题8 汉诺塔问题

c++递归,算法,开发语言,c++,数据结构,Powered by 金山文档

代码实现:

#include<bits/stdc++.h>
using namespace std;
void hanoi(int n,char a,char b,char c)
{
    if(n==1)
        printf("%c-%c\n",a,c);
    else
    {
        hanoi(n-1,a,c,b);
        printf("%c-%c\n",a,c);
        hanoi(n-1,b,a,c);
    }
}
int main()
{
    int n;
    cin>>n;
    hanoi(n,'a','b','c');
    return 0;
}

到了这里,关于c++详解递归算法-全网最全+例题讲解的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【C++】递归,搜索与回溯算法入门介绍和专题一讲解

    个人主页:🍝在肯德基吃麻辣烫 我的gitee:C++仓库 个人专栏:C++专栏 从本文开始进入递归,搜索与回溯算法专题讲解。 递归就是函数自己调用自己。 递归的本质是: 主问题:—相同的子问题 子问题:—相同的子问题 通过: 1)通过递归的细节展开图(前期可以,过了前期

    2024年02月09日
    浏览(28)
  • 全网最全超详细.htaccess语法讲解

    概述来说,htaccess文件是Apache服务器中的一个配置文件,它负责相关目录下的网页配置。通过htaccess文件,可以帮我们实现:网页301重定向、自定义404错误页面、改变文件扩展名、允许/阻止特定的用户或者目录的访问、禁止目录列表、配置默认文档等功能。 Unix、Linux系统或者

    2024年02月04日
    浏览(26)
  • 全网最全的快速排序方法--Hoare快排 挖坑法快排 二路快排 三路快排 非递归快排

    目录 一.快速排序 1.基本介绍 2.基本思想 二.Hoare快排 0.前情知识 1.交换数组中的两个元素 2.指定范围的插入排序 1.基本思路 2.代码实现 3.优化思路 三.挖坑法快排(校招中适用) 1.基本思路 2.代码实现 四.二路快排 1.基本思路 2.代码实现 3.优化思路 五.三路快排 1.基本思路 2.代码

    2023年04月21日
    浏览(35)
  • HDFS 短路读的实现(全网最全面深入讲解)

    HDFS短路读是性能优化的一个重要特性,它利用操作系统的内存映射 mmap 、 Domain Socket 和共享内存,避开传统的基于TCP的数据通信,极大提升了数据读取效率。 整个短路读的过程完全放弃传统的基于 TCP/IP 的通信方式,基于 Domain Socket 进行通信,基于 mmap 和内存共享进行数据同

    2024年02月08日
    浏览(46)
  • C语言递归算法实现经典例题

    递归是一种编程技术,它通过在函数内部反复调用自身来解决问题。当一个程序调用自己时,这就称为递归调用。递归可以有助于简化某些算法的实现和理解。在递归过程中,每个调用都会将一些数据保存在栈上,直到递归结束后才能被处理并弹出栈。 递归通常有两个部分:

    2024年02月05日
    浏览(44)
  • 【递推与递归】python例题详解

    文章目录 1、递归实现指数型枚举 2、递归实现排列型枚举 3、递归实现组合型枚举 4、简单斐波那契 5、带分数 6、翻硬币 1、递归实现指数型枚举 题目 从 1∼n这 n个整数中随机选取任意多个,输出所有可能的选择方案。 输入格式 输入一个整数 n。 输出格式 每行输出一种方

    2024年04月25日
    浏览(27)
  • C语言递归及经典例题详解

      什么是递归? 什么时候使用递归 例题1 顺序打印问题 例题2 求n的阶乘 例题3 求第n个斐波那契数 经典 汉诺塔问题 经典 青蛙跳台阶问题   什么是递归? 递归就是程序调用自身的编程技巧。递归通常把一个大型复杂的问题层层转化为一个与原问题相似,规模较小的问题来求

    2024年02月05日
    浏览(28)
  • 【全网最全最细】青龙面板搭配Ninja+依赖+Ninja配置的超细讲解教程!!!

    通过Ninja登录京东账号实现京东代挂赚取京东京豆    大家可以加群644288320,进行技术交流。 由于xshell没有finalshell创建文件那么方便,所有要进行以下操作: 注意:把finalshell关了,重新连接一下,把下面全部命令复制粘贴进去即可 然后找到以下文件(如图)

    2023年04月08日
    浏览(35)
  • C++ 窗体程序初步(全网最全)

    官方入门文档:[Create a traditional Windows Desktop application (C++)](https://docs.microsoft.com/en-us/cpp/windows/walkthrough-creating-windows-desktop-applications-cpp#:~:text=From the main menu%2C choose,Desktop Wizard then choose Next.) IDE的选择 窗体程序的开发我会推荐大家使用微软旗下的Microsoft Visual Studio 打开网页后下

    2024年02月04日
    浏览(29)
  • 三次握手详解,全网最全

    在介绍三次握手和四次挥手之前,先来简单认识一下 TCP 报文段的结构   TCP报文段也分为首部和数据两部分,首部默认情况下一般是20字节长度,但在一些需求情况下,会使用“可选字段”,这时,首部长度会有所增加,但最长不超过60字节。 TCP 首部包含以下内容,请留意其

    2023年04月26日
    浏览(33)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包