[AVR单片机] 想和大家讨论一下这段程序

[复制链接]
2743|5
 楼主| BitFu 发表于 2007-3-28 12:43 | 显示全部楼层 |阅读模式
int func(int x, int n)
{
  int value=1;
  if(n>0)
  {
     if(n%2)
        value=x;
     value=vlaue*func(x*x,n/2);
  }
  return value;
}

这段代码是否比循环获取x的n次方快?
ayb_ice 发表于 2007-3-28 14:58 | 显示全部楼层

随便说说

  仿真一下就知道了...
DEF 发表于 2007-3-28 18:37 | 显示全部楼层

意见:不一定快

因为这个程序采用了函数归递.
一般编成都要尽量避免.
主要原因是每次重入调用时都会破坏流水线,所以速度会受到影响.而且会大量占用堆栈空间作为临时变量.不建议使用.
 楼主| BitFu 发表于 2007-3-28 22:04 | 显示全部楼层

是阿

是的,的确不建议使用,其在单片机上,
但从内存换执行效率的角度,它是不是比循环运算少乘很多呀?
这是不是一个典型的算法程序?
goothin 发表于 2007-3-29 10:56 | 显示全部楼层

而且还有好多单片机不支持递归

李晓洁 发表于 2007-3-29 11:31 | 显示全部楼层

建议

建议不要使用此程序,不好!!!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

195

主题

1058

帖子

3

粉丝
快速回复 在线客服 返回列表 返回顶部