注册 登录
编程论坛 C++教室

递归代码出错,实在搞不懂

return_0 发布于 2020-02-19 19:37, 1412 次点击
如下是一道经典的题目:
汉诺塔传说
曾有一个印度的传说:在世界中心贝拿勒斯的圣庙里,一块黄铜板上插着三根宝石针(编号分别为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编辑过]

4 回复
#2
林月儿2020-02-19 19:41
cout<<f(a,x,y,z);
这句话有问题啊,cout的入参是个无返回值函数的返回值?
#3
return_02020-02-19 19:59
#4
return_02020-02-19 20:00
分全给你了,谢谢解答。
#5
return_02020-02-19 20:02
答案也错了,显示答案错误
1