/*--------------------------- 该段为引用-----------
递归算法解决问题的特点:
(1) 递归就是在过程或函数里调用自身。
(2) 在使用递归策略时,必须有一个明确的递归结束条件,称为递归出口。
(3) 递归算法解题通常显得很简洁,但递归算法解题的运行效率较低。所以一般不提倡用递归算法设计程序。
(4) 在递归调用的过程当中系统为每一层的返回点、局部量等开辟了栈来存储。递归次数过多容易造成栈溢出等。所以一般不提倡用递归算法设计程序。

------------------------------------------------- */

说一下我对递归算法的理解。

递归算法的代码,可以分成两个部分:递归出口(满足输出条件之类的)和递归部分(递归代码的主体)。

递归算法特点之一就是把整体换成部分。比如阶乘和全排列问题,都是把问题“降阶”(待会看代码就知道什么意思了。)

还有一个最重要的特点————————效率低,但是递归算法作为入门级算法还是很值得我这样的小白研究的。

来看看几个经典的问题。1.全排列 ,2.汉诺塔,3.阶乘

1.全排列:给你一个数组,你把这个数组里的数的所有排列方式写列出来。

input {1,2,3}

output{1,2,3},{1,3,2},{2,3,1}......(懒得敲了)

代码:

#include <iostream>
using namespace std;
int n = 0;  void swap(char *q ,char *p)
{   //交换函数 int temp;  temp= *q;  *q = *p;  *p = temp;
}   void perm(char arr[],int k, int m )
{  int i;  if(k >m)  {  for(i = 0 ; i <= m ; i++)  {  //递归结束出口,当数列只剩下一个数的时候输出 cout<<arr[i]<<" ";  }  cout<<endl;   }  else  {  for(i = k ; i <=m;i++)  {  //递归部分 swap(arr[k],arr[i]);  perm(arr,k+1,m);  /*把数组看成1{234}+2{134}+3{124}+4{123}再把{234}看成2{34}+3{24}+4{23}一直把整体化为部分,一直把大问题分解成小问题。*/ swap(arr[k],arr[i]);  }  }
}  int main()
{  char arr[] ="1234";  perm(arr,0,3);     return 0;
}

2.汉诺塔问题

就是移环子的游戏

这个也可以用递归算法实现。

ABC分别是123柱子,代码思路大概是这样的

把N-1层的环子先通过C移到B,最后再把第N层的最大的环子移到C,这个时候就剩下一个N-1层的新“塔”,那么我们把他看成一个新的“塔”把B柱看成之前的A柱,通过C柱把(N-1)-1层移到A柱,再把第N-1层的最大(原本第二大)的环子放到C,如此循环最后N=1 就了解了。

#include<iostream>
using namespace std;
void hanoi(int n,char a,char b,char c)
{
if(n==1)
cout<<n<<" "<<a<<" "<<c<<endl;
else
{
hanoi(n-1,a,c,b);
cout<<n<<" "<<a<<" "<<c<<endl;
hanoi(n-1,b,a,c);
}
}
int main()
{
int n;
cout<<"输入正整数:"<<endl;
cin>>n;
cout<<"结果为"<<endl;
hanoi(n,'A','B','C');
/*
假设有4层,跟全排列差不多的想法,先把他看成3层,再看成2层,而且移动的方法是相同的。*/
return 0;
} 

3.阶乘……不讲了。。

C++递归算法经典实例详解相关推荐

  1. python 经典脚本文件_Python3.5文件读与写操作经典实例详解

    本文实例讲述了Python3.5文件读与写操作.分享给大家供大家参考,具体如下: 1.文件操作的基本流程: (1)打开文件,得到文件句柄并赋值给一个变量 (2)通过句柄对文件进行操作 (3)关闭文件 ...

  2. python基础实例-Python基础之字符串常见操作经典实例详解

    本文实例讲述了Python基础之字符串常见操作.分享给大家供大家参考,具体如下: 字符串基本操作 切片 # str[beg:end] # (下标从 0 开始)从下标为beg开始算起,切取到下标为 en ...

  3. python实战经典例子_Python基础之列表常见操作经典实例详解

    本文实例讲述了Python基础之列表常见操作.分享给大家供大家参考,具体如下: Python中的列表操作 列表是Python中使用最频繁的数据类型[可以说没有之一] 一组有序项目的集合 可变的数据类型 ...

  4. 50个经典jquery实例_【电气知识】从原理图到程序的4个经典实例详解

    专注于机械行业.专业.职业信息分享  服务于制造业百万工程师 推荐阅读 [软件技巧]SolidWorks大型装配体打开慢怎么办?这个技巧迅速提速 [机电知识]电机温度超过多少会被烧坏,干货小知识 [专 ...

  5. python100例详解-Python基础之列表常见操作经典实例详解

    本文实例讲述了Python基础之列表常见操作.分享给大家供大家参考,具体如下: Python中的列表操作 列表是Python中使用最频繁的数据类型[可以说没有之一] 一组有序项目的集合 可变的数据类型 ...

  6. c语言编程 输入螺旋数组,C语言 经典题目螺旋矩阵 实例详解

    C语言 经典题目螺旋矩阵 实例详解 C语言 经典题目螺旋矩阵 //N阶螺旋矩阵 #include #include int main() { int N,i,j,n,num=1; int a[10][ ...

  7. 回溯法实例详解(转)

    概念 回溯算法实际上一个类似枚举的搜索尝试过程,主要是在搜索尝试过程中寻找问题的解,当发现已不满足求解条件时,就"回溯"返回,尝试别的路径. 回溯法是一种选优搜索法,按选优条件向前 ...

  8. python命名空间和闭包_Python函数基础实例详解【函数嵌套,命名空间,函数对象,闭包函数等】...

    本文实例讲述了Python函数基础用法.分享给大家供大家参考,具体如下: 一.什么是命名关键字参数? 格式: 在*后面参数都是命名关键字参数. 特点: 1.约束函数的调用者必须按照Kye=value的 ...

  9. python类是实例的工厂_Python设计模式之工厂方法模式实例详解

    本文实例讲述了Python设计模式之工厂方法模式.分享给大家供大家参考,具体如下: 工厂方法模式(Factory Method Pattern):定义一个用于创建对象的接口,让子类决定实例化哪一个类, ...

  10. python装饰器函数-Python函数装饰器常见使用方法实例详解

    本文实例讲述了Python函数装饰器常见使用方法.分享给大家供大家参考,具体如下: 一.装饰器 首先,我们要了解到什么是开放封闭式原则? 软件一旦上线后,对修改源代码是封闭的,对功能的扩张是开放的,所 ...

最新文章

  1. SpringBoot实战 之 异常处理篇
  2. qpython3编辑器怎么用_Python快速入门系列:Pyqt5界面开发好帮手-Qss样式编辑器介绍...
  3. window获取历史url_Facebook 开出历史最高赏金,55,000 美元奖励十年漏洞发现者
  4. 位操作符:与,或,异或 狼羊菜
  5. linux驱动开发框架
  6. Windows RC、CTP、RTM、OEM、RTL、VOL等版本区别
  7. 帮你免于失业的十大技术
  8. [转] WPF TextBox控件中文字实现垂直居中
  9. RGB和RGBA之间的转换
  10. python学习笔记(1) - python操作mysql数据库【持续更新中...】
  11. 达朴汇联CEO张焱:从隐私计算出发,共建Web3.0
  12. Android之视频裁剪
  13. sample函数注意事项
  14. kubernetes(4)Pod的核心概念、Pod的调度
  15. CSDN下载资源报错:This XML file does not appear to have any style information associated with it.
  16. 手机APP开发之MIT Appinventor详细实战教程(九),工具箱的设计和MIT的基础知识讲解
  17. win7的svchost.exe占用内存过高如何解决
  18. 同样是食堂,为什么你却如此优秀!
  19. 招募,IT 技术界的伯乐和千里马
  20. 盛大创新院许式伟:影响我一生的五个重要选择

热门文章

  1. DirectX9常用软件运行库
  2. ASP+Access+Dreamweaver+IIS搭建简单数据库管理系统_第一章_前言
  3. 多尺度图像增强Retinex相关算法学习及实现
  4. Mac eclipse adt sdkmanager打不开
  5. Matlab遗传算法工具箱的使用
  6. 初学“深入浅出MFC”之(一)
  7. 微型计算机控制程序题,微机控制技术》习题集
  8. 嵌入式软件开发好,还是硬件开发好?
  9. oracle数据库例题答案下载,Oracle数据库试题及答案[教学知识]
  10. 从浏览器缓存提取媒体文件