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++ throw(…)
当在C++语言中引入异常时,引入了相应的throw(…)动态异常说明符,注释了哪些异常可以由函数抛出.比如: // this function might throw an integer or a ...
- cube.js 学习 cube 连接mongodb 试用
cube.js 对于mongodb 的连接是通过mongodb bi connector(mysql 协议)处理的,以下为简单的试用 安装mongo bi connector 这个玩意用docker ...
- 【JZOJ6228】【20190621】ni
题目 $ n $ 个数 $ E_i $ ,$ F(i) $ 表示对1-i的数任意排列 $ p $ ,初始 $ X=0 $ ,依次执行: \(X \lt E_{p_j} \ , \ X++\) $X \ ...
- IOI2019题解
由于太懒了,好久没更新了.发个题解好了. shoes 首先不难证明鞋子配对一定是从前往后将同一种的左和右配对. 配好对之后首先我们可以假设左在右的左边,然后讨论可知将左边靠前的排在前面更优. rect ...
- C博客作业01——分支,顺序结构
C博客作业01--分支,顺序结构 0.展示PTA总分 1本章学习内容 1.1学习内容总结 1)格式化输出函数printf(),scanf(). 它是什么? 对于初学者而言,一开始了解接触它们,只是被硬 ...
- javascript 中的方法注入
js 中的方法注入 java中很多框架支持 apo 的注入, js中也可以类似的进行实现 主要是通过扩展js中方法的老祖 Function 对象来进行实现. Function.prototype.af ...
- BMP图像信息隐藏
图像隐写算法LSB—Least Significant Bits,又称最不显著位.LSB算法就是将秘密信息嵌入到载体图像像素值得最低有效位,改变这一位置对载体图像的品质影响最小. 原理如下: 以实验用 ...
- log4j 1.2 配置和使用简述
本文通过MetaWeblog自动发布,原文及更新链接:https://extendswind.top/posts/technical/log4j_properties_simple_introduct ...
- Noip2019暑期训练1
题目名称 时空定位 棋子移动 高精度乘法 数独游戏 存盘文件名 location piece mul sudoku 输入文件名 location.in piece.in mul.in sudoku.i ...
- Linux下的nexus数据迁移
刚到公司没多久,目前公司有两个项目公用一个nexus的maven私服,现在想把两个私服的jar包拆分开: 我在原私服的nexus服务器中, 1.备份原nexus使用命令 完成tar包的压缩 打包完毕后 ...