加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

Scala / C:Tail递归函数而不是输入循环

发布时间:2020-12-16 18:34:21 所属栏目:安全 来源:网络整理
导读:自从我进入 Scala后,我开始使用尾递归编写函数,并了解到C编译器也支持它,甚至优化尾递归函数.现在我很好奇优化的可靠性,并且可以将它用于我的主循环或命令提示符之类的东西吗? 传统上我写了这样的命令提示: bool running = true;string input;while(runnin
自从我进入 Scala后,我开始使用尾递归编写函数,并了解到C编译器也支持它,甚至优化尾递归函数.现在我很好奇优化的可靠性,并且可以将它用于我的主循环或命令提示符之类的东西吗?

传统上我写了这样的命令提示:

bool running = true;
string input;
while(running_){
  input = getInput();
  executeCommand(input);
  if(input == "quit") running_ = false;
}

现在用这样的尾递归函数替换它会是一件坏事吗?

string input = "nothing";
void parseInput(){
  if(input != "nothing") executeCommand(input);

  getline(cin,input);
  if(input != "quit") parseInput();
}

解决方法

TCO(尾调用优化)由不同的编译器应用于不同级别的可靠性.在您的特定情况下,您通过在分支内的调用之后不立即返回来使编译器更难.编译器必须采取额外步骤,以确保在调用完成后没有代码将被执行.

为了确保TCO确实发生,你必须依靠你最好的朋友.你最好的朋友是asm输出.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读