C++之递归函数的参数传递问题
2015-10-06 20:36
260 查看
学习汉诺塔时,对于递归函数重新学习。但是其参数传递却看不懂。搜索资料,得:
代码如下:
再次传递过程中hanoi(2,a,c,b),则a='A',c='C',b='B'或写成a='A',b='B',c='C',整体变成ACB;
继续传递,hanoi(1,a,c,b),则a='A',c='B',b='C'或写成a='A',b='C',c='B',整体变成ABC;
其传递过程为不管上一次调用中abc为何种顺序,统一看做为abc(顺序)所对应的字符串!
即,在调用hanoi(1,a,c,b)时,把hanoi(2,a,c,b)看做为hanoi(2,a,b,c)其中a='A',b='C',c='B',然后对应顺序传递下去可得到a='A',c='B',b='C',整体变为ABC。
可以理解为cout中的abc就是hanoi中不管顺序如何按照预定义的abc进行定义。例如执行hanoi(1,a,c,b)后,得到ABC,则a='A',b='B',c='C'!并不是其函数中的a='A',c='B',b='C'!
这就是我的理解,虽然绕的有点晕。
运算结构如下:
代码如下:
#include "stdafx.h" #include <iostream> #include <stdlib.h> 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; cin >> n; hanoi(n, 'A', 'B', 'C'); system("pause"); return 0; }对于调用,设n=3,调用hanoi(3,'A','B','C')→void hanoi(int n, char a, char b, char c)则首次传递过程中为a=‘A’,b=‘B’,c=‘C’;
再次传递过程中hanoi(2,a,c,b),则a='A',c='C',b='B'或写成a='A',b='B',c='C',整体变成ACB;
继续传递,hanoi(1,a,c,b),则a='A',c='B',b='C'或写成a='A',b='C',c='B',整体变成ABC;
其传递过程为不管上一次调用中abc为何种顺序,统一看做为abc(顺序)所对应的字符串!
即,在调用hanoi(1,a,c,b)时,把hanoi(2,a,c,b)看做为hanoi(2,a,b,c)其中a='A',b='C',c='B',然后对应顺序传递下去可得到a='A',c='B',b='C',整体变为ABC。
可以理解为cout中的abc就是hanoi中不管顺序如何按照预定义的abc进行定义。例如执行hanoi(1,a,c,b)后,得到ABC,则a='A',b='B',c='C'!并不是其函数中的a='A',c='B',b='C'!
这就是我的理解,虽然绕的有点晕。
运算结构如下:
相关文章推荐
- C#解决汉诺塔问题DEMO
- C++实现汉诺塔算法经典实例
- C# 递归函数详细介绍及使用方法
- javascript中递归函数用法注意点
- js中递归函数的使用介绍
- java数据结构和算法学习之汉诺塔示例
- Lua中的递归函数写法实例
- c#汉诺塔的递归算法与解析
- c#实现汉诺塔问题示例
- C语言实现汉诺塔游戏
- JavaScript汉诺塔问题解决方法
- java求解汉诺塔问题示例
- python益智游戏计算汉诺塔问题示例
- Go语言实现汉诺塔算法
- php递归函数三种实现方法及如何实现数字累加
- 递归思想分析解决问题
- C语言_递归函数之汉诺塔问题
- 汉诺塔问题
- 汉诺塔演示程序QBasic版,开博第一帖
- 递归实现汉诺(Hanoi)塔---C语言版