首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如果找不到解决方案,我如何离开递归循环而不打印任何内容?

如果找不到解决方案,我如何离开递归循环而不打印任何内容?
EN

Stack Overflow用户
提问于 2017-04-21 02:08:34
回答 2查看 68关注 0票数 1

我有一场比赛,比赛的重点是在21个回合内找到解决方案。如果它找不到解决方案,它应该输出"No solution“,并继续主要的操作。如果有一个解决方案,它应该向上堆栈,并输出每一步(现在向后是好的)。

当我找不到解决方案时,我正在尝试找出如何在不打印任何东西的情况下离开堆栈。目前,它将打印“21圈内无解决方案”。但仍然会向上堆栈,打印每一个动作。当有一个解决方案时,它确实起作用了。

代码语言:javascript
复制
bool TabletStock(int _tablets, int _turns) {
   if (_tablets == 18){
       cout << "Found solution. I have exactly 18 tablets, with " << 21 - _turns << " moves left.\n";
       return 1;
   }

   _turns++;

   if (_turns >= 21){
       cout << "No solution in 21 turns.\n";
       return 0;
   }

   if (_tablets % 2 == 1){
       TabletStock((++_tablets) / 2, _turns);
       cout << "After incrementing, reduce " << _tablets << " by half to get " << _tablets / 2 << ".\n";
   }
   else if (_tablets % 3 == 0 && _tablets % 18 == 0){
      TabletStock(_tablets / 3, _turns);
      cout << "With " << _tablets << ", divide by 3 to get " << _tablets / 3 << ".\n";
   }
   else{
      TabletStock((_tablets + 24), _turns);
      cout << "With " << _tablets << ", add 24 to get " << _tablets + 24 << ".\n";
   }
}

此时的函数调用为TabletStock(int,0);

我一直在尝试在"if (_turns >= 21)“语句中做一些事情,因为它在打印所有步骤之前打印出来,所以如果我在if语句中找到了一种”中断“堆栈的方法,也许我可以让它不输出所有的cout步骤。

EN

回答 2

Stack Overflow用户

发布于 2017-04-21 02:15:20

当您调用TabletStock()时,它将返回bool。每一次打印都应该用if语句包装。如果为false,则不打印。

例如,更改以下内容:

代码语言:javascript
复制
TabletStock((_tablets + 24), _turns);
cout << "With " << _tablets << ", add 24 to get " << _tablets + 24 << ".\n";

至:

代码语言:javascript
复制
if(TabletStock((_tablets + 24), _turns))
{
    cout << "With " << _tablets << ", add 24 to get " << _tablets + 24 << ".\n";
}
票数 1
EN

Stack Overflow用户

发布于 2017-04-21 02:21:35

每次在字符串变量中追加结果时,都可以将字符串存储在作用域之外的变量中,或者将其添加到函数参数中。

代码语言:javascript
复制
if (_tablets % 3 == 0 && _tablets % 18 == 0) 
{
    mystring += "After incrementing, reduce ....... ";
    TabletStock(_tablets / 3, _turns);
} 

如果在最后:

代码语言:javascript
复制
if (_tablets == 18) 
{
    cout << mystring << endl;
    return 1;
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43526837

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档