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 默认参数有 ...
随机推荐
- C# 监控网速
主要有两个类,其一是NetworkAdapter,该类的作用是获取本机网络适配器列表,并且可以通过该类的属性获取当前网速数据:其二是NetworkMonitor,该类是通过.NET的Performan ...
- 【批处理】for命令
for 命令 学习:https://www.cnblogs.com/Braveliu/p/5081087.html FOR这条命令基本上都被用来处理文本,但还有其他一些好用的功能! 看看他的基本格式( ...
- 洛谷 P3371 【模板】单源最短路径(弱化版) 题解
P3371 [模板]单源最短路径(弱化版) 题目背景 本题测试数据为随机数据,在考试中可能会出现构造数据让SPFA不通过,如有需要请移步 P4779. 题目描述 如题,给出一个有向图,请输出从某一点出 ...
- mysql 日期处理
mysql> select curdate(); +------------+ | curdate() | +------------+ | -- | +------------+ row in ...
- 从0开始部署GPU集群-1:k8s部署生态
1 k8s:nvidia deepops 2 批处理:华为volcano 3 工作流:argo
- hadoop 综合大作业
作业要求来源:https://edu.cnblogs.com/campus/gzcc/GZCC-16SE2/homework/3339 本次作业是在期中大作业的基础上利用hadoop和hive技术进行 ...
- ORA-55624: 此时无法为闪回归档启用表
我们在某应用中使用了FDA特性,但是某些表在解除归档后重新启用时报"ORA-55624: 此时无法为闪回归档启用表",经查询google和MOS相关信息,原因就是太频繁.解决方法: ...
- centos安装redis 5.0版本的集群
我在本地VM-Centos里安装5.0.5时安装遇到了些问题,参考了Blog:https://www.cnblogs.com/shawhe/p/9548620.html 顺利安装完成. 安装redis ...
- Python中的args和kwargs
有时,你会看到python中定义函数的时候带有两个奇怪的参数:*args.**kwargs.如果你曾经想知道它们是干什么的,或者想知道你的IDE为什么在main()函数中定义它们,那么本文可以帮助到你 ...
- Docker CentOS / Ubuntu容器开启 SSH 服务
Docker CentOS / Ubuntu容器开启 SSH 服务 在CentOS容器内执行 yum install passwd openssl openssh-server -y # Ubuntu ...