递归代码出错,实在搞不懂
如下是一道经典的题目:汉诺塔传说
曾有一个印度的传说:在世界中心贝拿勒斯的圣庙里,一块黄铜板上插着三根宝石针(编号分别为AA,BB和CC)。印度教的主神梵天在创造世界的时候,在其中一根针上从下到上地穿好了由大到小的nn片金片,这就是所谓的汉诺塔。
有一个僧侣在按照下面的法则移动这些金片:一次只移动一片,不管在哪根针上,小片必须在大片上面。僧侣们预言,当所有的金片都从梵天穿好的那根针上移到另外一根针上时,世界就将在一声霹雳中消灭,而梵塔、庙宇和众生也都将同归于尽。
假设nn片金片一开始都在AA柱上,请给出一个移动序列,最后将这些金片移动到CC柱上。
输入格式
第一行:单个整数nn
输出格式
若干行:格式(待定义)
例子
Input
3
复制一下
Output
1:A-->C
2:A-->B
1:C-->B
3:A-->C
1:B-->A
2:B-->C
1:A-->C
复制一下
我的代码:
程序代码:
#include<iostream> using namespace std; void f(int n,char x,char y,char z){ if(n==0)return; f(n-1,x,z,y); cout<<n<<":"<<x<<"-->"<<z<<endl; f(n-1,y,x,z); } int main(){ int a; char x='A',y='B',z='C'; cin>>a; cout<<f(a,x,y,z); return 0; }
数据显示编译错误
出错内容: [Error] no match for 'operator<<' (operand types are 'std::ostream {aka std::basic_ostream<char>}' and 'void')
请教大神这是怎么回事?
[此贴子已经被作者于2020-2-19 19:39编辑过]