【问题标题】:Why does return not work?为什么退货不起作用?
【发布时间】:2016-12-26 22:54:58
【问题描述】:

我是 C++ 的初学者,我正在尝试使用递归编写阶乘。 但是,不知何故,return 不起作用。这是我的代码:

#include <iostream>

using namespace std;

int factorial(int num) {
    if(num == 1) {
        return 1;
    }
    return num * factorial(num - 1);
}

int main() {
    int num;
    cout << "Please enter a number and I will do its factorial : ";
    cin >> num;
    factorial(num); 
}

谁能告诉我为什么return 不起作用?

顺便说一句,我在 mac 上使用 sublime。

【问题讨论】:

  • “行不通”是什么意思?编译失败了吗?它会崩溃吗?它会返回一个意外的值吗?
  • 不起作用是什么意思?请注意,在 main 中,您不会对来自 factorial 的返回值做任何事情。
  • 返回不会显示在终端上。
  • @Ian 我没有投反对票,但为了将来参考,请尝试在问题中包含“退货不会显示在终端上”部分。 “它不起作用”对于一个完整的问题来说信息不足
  • @KABoissonneault main 会得到一个隐含的 return 0; 如果它被忽略。

标签: c++ return


【解决方案1】:

Return 效果很好,只是你的代码没有使用它。

factorial(num) 的调用不会产生任何输出,只会产生返回值。如果你想看打印,加cout &lt;&lt; factorial(num) &lt;&lt; endl;

【讨论】:

  • 为什么是endl 而不是'\n'
  • @Deduplicator:因为目的是使输出立即可用,因此刷新。
  • 一个建议:不要像这样计算阶乘。如果是 32 位整数,它将在阶乘(13)处溢出。
  • @Hurkyl:是吗?不太可能,在下一个提示之前/退出之前似乎更像是需要的。
  • @Deduplicator:这通常是我在进行控制台 I/O 时的意图,尽管我倾向于不编写交互式应用程序;在任何情况下,尝试优化掉刷新还为时过早。顺便说一句,如果意图在下一个提示之前可用,那么不刷新实际上是一个错误,因为从cin 读取保证刷新cout !我知道的极端情况是cin 的缓冲区中是否仍有可用输入;我不确定是否还有其他人。
猜你喜欢
  • 2017-04-06
  • 2015-09-30
  • 2013-08-10
  • 2013-07-13
  • 2014-08-21
  • 2017-12-04
  • 2013-08-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多