hur.cn - 华软网

 热门搜索

VC能否把一小段尾递归的代码优化成循环? 需要什么编译选项?

  作者:未知    来源:网络    更新时间:2011/3/14
如下代码:
C++">#include "stdafx.h"
#include <stdio.h>
int f(int a,int start){
    if(1==a)return start;
    return f(a-1,start*a);
}
int main() {
    printf("%d\n",f(4,1));
    return 0;
}


如何把这个尾递归优化成循环的模式,VC有什么编译选项支持? 
我希望在debug模式下进入反汇编能看到优化的结果,但是又怀疑是不是只有release版本才能做这样的优化?

大虾指点一下哈!
---华软 网友回答---
C++">
int f2(int a, int start)
{
  while(a > 1)
  {
    start *= a;
    a--;
  }
  return start;
}

---华软网友回复---
C++">
int f(int a,int start)
{
   for(;a>1,--a)
   {
      start*=a;
   }
   return start;
}

---华软网友回复---
引用 2 楼 huangcheng90 的回复:
C/C++ code

int f(int a,int start)
{
   for(;a>1;--a)
   {
      start*=a;
   }
   return start;
}

不好意思 写错了一个位子
---华软网友回复---
引用 3 楼 huangcheng90 的回复:
引用 2 楼 huangcheng90 的回复:

C/C++ code

int f(int a,int start)
{
   for(;a>1;--a)
   {
      start*=a;
   }
   return start;
}

不好意思 写错了一个位子


但是我的问题是,编译器的什么编译选项能把我的尾递归代码优化成循环,可以反汇编看到编译后的结果。

需求是: 我不是想改写代码,而是希望编译器能做到。谢谢大牛,请继续指教!
---华软网友回复---
老兄,据我所知,编译器还没有这么厉害吧??
如果有的话告诉我一声,学习一下。      
华软声明:本内容来自网络,如有侵犯您版权请来信指出,本站立即删除。