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输出. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |