我有两个功能,如下所示。我想做的很简单。要使用
Toh2的变量(int dskToMv,int cLocation,int tmpLocation,int fLocation)并在Toh函数中打印它们,如下所示:
cout<<" Move one disk from the "<< orpeg << " to the "
<< depeg<< cLocation << "->" << fLocation << <<endl;
以下是两个功能:
void ToH2(int dskToMv, int cLocation, int tmpLocation, int fLocation)
{
//function to print the numbers
if( dskToMv != 0 )
{
ToH2( dskToMv-1, cLocation, fLocation, tmpLocation );
//The below print is what I want to use in the Toh2 function
// cout << cLocation << "->" << fLocation << endl;
ToH2( dskToMv-1, tmpLocation, cLocation, fLocation );
}
}
void ToH(int dskToMv, string orpeg, string expeg, string depeg)
{
if( dskToMv != 0 )
{
ToH( dskToMv-1, orpeg, depeg, expeg );//original peg(A),extra peg(B),destination peg(C)
//print in this cout the two additional variables from ToH2
cout<<" Move one disk from the "<< orpeg << " to the " << depeg <<endl;
ToH(dskToMv-1, expeg, orpeg, depeg );
}
}
int main()
{
int c;
cout << "Enter the number of disks: ";
cin >> c;
ToH(c, "original peg ", "extra peg", "destination peg");
return 0;
}
输入3时的输出:
将一个磁盘从原始挂钩移动到目标挂钩
将一个磁盘从原始挂钩移动到额外的挂钩
将一个磁盘从目标挂钩移动到额外的挂钩
将一个磁盘从原始挂钩移动到目标挂钩
将一个磁盘从额外的挂钩移动到原始挂钩
将一个磁盘从额外的挂钩移动到目标挂钩
将一个磁盘从原始挂钉移动到目标挂钩
我想做什么:
将一个磁盘从原始挂钉移动到目标挂钉1-> 3
将一个磁盘从原始挂钉移动到额外的挂钉1-> 2
将一个磁盘从目标挂钩移动到额外的挂钩3-> 2
将一个磁盘从原始挂钩移动到目标挂钉1-> 3
将一个磁盘从额外的挂钉移动到原始挂钉2-> 1
将一个磁盘从额外的挂钩移动到目标挂钩2-> 3
将一个磁盘从原始挂钩移动到目标挂钉1-> 3
答案 0 :(得分:3)
你理智的选择是:
其他(此处不太合适)方法是lambda函数和std::bind
。
不太合理的选择是将共享变量设为全局变量。不推荐。
答案 1 :(得分:1)
你想要做的事情是不可能的,并没有多大意义。
函数的参数仅在调用该函数时存在
如果你想让另一个函数使用它们的值,你需要第一个函数调用该函数并以某种方式将这些值传递给它。
特别是,如果我调用了不同的函数,则无法找到“相应参数的值”。
将功能合二为一。
void ToH(int dskToMv, int cLocation, string orpeg, int tmpLocation, string expeg, int fLocation, string depeg)
{
if( dskToMv != 0 )
{
ToH( dskToMv-1, cLocation, orpeg, fLocation, depeg, tmpLocation, expeg);
cout<<" Move one disk from the "<< orpeg << " to the " << depeg
<< " " << cLocation << " -> " << fLocation << endl;
ToH( dskToMv-1, tmpLocation, expeg, cLocation, orpeg, fLocation, depeg);
}
}
int main()
{
int c;
cout << "Enter the number of disks: ";
cin >> c;
ToH(c, 1, "original peg ", 2, "extra peg", 3, "destination peg");
}
或者,您可以使用表格
void ToH(int dskToMv, int cLocation, int tmpLocation, int fLocation)
{
static std::string names[] = {"original peg", "extra peg", "destination peg"};
if( dskToMv != 0 )
{
ToH( dskToMv-1, cLocation, fLocation, tmpLocation);
cout<<" Move one disk from the "<< names[cLocation - 1] << " to the " << names[fLocation - 1]
<< " " << cLocation << "-> " << fLocation << endl;
ToH( dskToMv-1, tmpLocation, cLocation, fLocation);
}
}
int main()
{
int c;
cout << "Enter the number of disks: ";
cin >> c;
ToH(c, 1, 2, 3);
}
答案 2 :(得分:0)
声明命名空间:
namespace mySpace {
int dskToMv;
// other variable
}
并从以下任何函数访问变量:
mySpace.dskToMv =20;
// .....
cout<<mySpace.dskToMv;
这是在函数之间共享变量的一般方法。无论如何,似乎你实施了河内的塔。好吧,你的代码在逻辑上是不正确的。