c++递归函数
一、什么是递归算法
递归即递推+回归。递归算法是把问题转化为规模缩小了的同类子问题,然后递归调用函数(或过程)来表示问题的解。
二、递归算法的特点
1.必须有 递归函数 + 递归出口
2.递归算法解题通常显得简洁,但效率较低且系统通过栈来储存每一层的返回点、局部变量,递归次数过多容易造成栈溢出。
三、如何编写递归函数
例:Hanoi 塔(问题内容不再赘述)
我们以三个圆盘(从小到大依次成为1,2,3号)三根柱子(A,B,C)为例:

想要将 3号 移至C柱
step1. 借助C把1、2号盘移到B;
step2. 将3号盘移至C;

想要将 2号 移至 C 柱 则用上述同样的思想 (递归函数的内涵所在,将大问题逐个分解为相同小问题)
step1. 借助C 将 1号盘 移至 A柱 /*这里可以直接将 1号盘移至A,但如果 B盘上不止一个盘则需要借助C ,我这里是 按整体规律来写*/
step2. 将 2号盘 移至 C;

最后将 1号盘 移至 C柱

Hanoi塔 解题步骤:
1.将 A 上 n-1 个盘子移到B (借助C)
2.把 A 上 剩下的盘子移到C
3.将 n-1 个盘子从B 移到 C (借助A)
!!!
不用死记A B C在各个盘移动时的站位,将他们想成
初始柱 过渡柱 目标柱 这样在敲代码时思路会清晰一些
代码实践:
#include<iostream>
using namespace std; void move(char x1, char x2) {
cout << x1 << "-->" << x2 << endl;
} //A、B、C三个位置依次对应 初始柱/ 过渡柱/ 目标柱【是对应的位置对应各种柱子(初始、过渡、目标柱) 不是ABC字母对应】
void hanoi(int n, char A, char B, char C) { if (n == )
move(A, C);
else {
hanoi(n - , A, C, B); //A为初始柱 C为过渡柱 B为目标柱
move(A, C);
hanoi(n - , B, A, C); //B为初始柱 A为过渡柱 C为目标柱
}
} int main() {
cout << "输入盘子数: ";
int p;
cin >> p;
char A = 'A', B = 'B', C = 'C';
hanoi(p, A, B, C);
return ;
}

----------------------------------------------------小分割线----------------------------------------------
注意递归算法的两个必要条件递归出口和递归函数
认真分析如何将大问题分解为子问题
这些需要多加练习~
==============================大分割线=========================
如有错误还是希望评论指正 :)
c++递归函数的更多相关文章
- javascript中的递归函数
正常的递归函数如下: function factorial(num){ ){ ; }else{ ); } } 这个函数表面看起来还ok,但如果我们执行下面代码就会出错. var jenny = fac ...
- JS函数相关及递归函数的使用
JS函数相关及递归函数的使用 通用js程序: function 函数名(参数列表) { 函数体 } 可使用alert()输出,也可用return返回值. alert与return区别: functio ...
- python3--函数(函数,全局变量和局部变量,递归函数)
1.1函数 1.1.1什么是函数 函数就是程序实现模块化的基本单元,一般实现某一功能的集合.函数名:就相当于是程序代码集合的名称参数:就是函数运算时需要参与运算的值被称作为参数函数体:程序的某个功能, ...
- Python之路 day3 递归函数
#!/usr/bin/env python # -*- coding:utf-8 -*- #Author:ersa """ 在函数内部,可以调用其他函数.如果一个函数在内 ...
- Python3学习(二)-递归函数、高级特性、切片
##import sys ##sys.setrecursionlimit(1000) ###关键字参数(**关键字参数名) ###与可变参数不同的是,关键字参数可以在调用函数时,传入带有参数名的参数, ...
- 浅谈-js递归函数
所谓的递归函数就是在函数体内调用本函数.使用递归函数一定要注意,处理不当就会进入死循环.递归函数只有在特定的情况下使用 ,比如阶乘问题 下面我们就做一个10以内的阶乘试试看吧: [Ctrl+A 全选 ...
- Codevs 1910递归函数
1910 递归函数 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题目描述 Description 对于一个递归函数w(a, b, c). 如果a <= ...
- codevs1910 递归函数
难度等级:黄金 codevs1910 递归函数 题目描述 Description 对于一个递归函数w(a, b, c). 如果a <= 0 or b <= 0 or c <= 0就返 ...
- js中递归函数的使用介绍
所谓的递归函数就是在函数体内调用本函数.使用递归函数一定要注意,处理不当就会进入死循环.递归函数只有在特定的情况下使用 ,比如阶乘问题 递归函数是在一个函数通过名字调用自身的情况下构成的,如下所示: ...
- 【Python】[函数] 函数的参数与递归函数
一.函数的参数1.位置参数2.默认参数 n就是默认参数 def power(x,n=2): s=1 while n > 0: n = n - 1 s = s * x return s 默认参数有 ...
随机推荐
- (尚019)Vue基于脚手架编写项目
vue_demo目录结构截图: (1)图一 (2).图二 (3).图三 (四).图四 (5).图五 (6).图六 (7).图七 不能随便改入口文件的名字,因为已经配置好了 (8).图八 (9).图九 ...
- Centos 不重启 修改ulimit参数
1. 查看limits.conf文件 cat /etc/security/limits.conf 2. 打开编辑limits.conf文件 sudo vim /etc/security/limits. ...
- A simple dispiction of dijkstra
前言 \(SPFA\)算法由于它上限 \(O(NM) = O(VE)\)的时间复杂度,被卡掉的几率很大.在算法竞赛中,我们需要一个更稳定的算法:\(dijkstra\). 什么是\(dijkstra\ ...
- 安卓入门教程(十三)-Activity
已经发表个人公众号 什么是Activity? Android是由Activity,Service,Content,Provider等组件组成,其中要讲的就是Activity组件,这是最基本,且常用的组 ...
- HttpClient 发送请求和参数
发送请求 没有参数 private static void getData() { String timeStamp = String.valueOf(System.currentTimeMillis ...
- fluent加载第三方(C++,Fortan等)动态链接库
这里我介绍一种比较简单的方法,首先我们从ANSYS Fluent UDF Manual上随便找一段正确的UDF,下面这段UDF取自ANSYS 18的ANSYS Fluent UDF Manual,位于 ...
- SSH框架整合2
===========================================web.xml================================================== ...
- Spring Boot 支持 HTTPS 如此简单,So easy!
这里讲的是 Spring Boot 内嵌式 Server 打 jar 包运行的方式,打 WAR 包部署的就不存在要 Spring Boot 支持 HTTPS 了,需要去外部对应的 Server 配置. ...
- python使用ldap3进行接口调用
把自己使用到的ldap调用的代码分享出来,希望大家可以参考 #!/usr/bin/python # -*- coding: utf-8 -*- """ @Time : 2 ...
- Android - Button(按钮)的响应点击事件的4种写法
Button控件setOnclickListener(View.OnClickListener listener)来接收一个点击事件的监听器 自定义一个点击事件监听器类让其实现View.OnClick ...