新手求教一个算法题Implement pow(x, n),单步执行时有些地方不太明白,谢谢!!!

klmn111aaa 2014-06-05 12:44:01
Implement pow(x, n).

#include<iostream>
#include<sstream>
#include<string>
using namespace std;

double pow1(double x, int n) {
double u=0, k=0;
if (n == 0 || x == 1) return 1;
if (x == 0) return 0;

if (n < 0) x = 1/x;
int a = abs(n);
if (a == 1) return x;
double t = pow1(x, a/2);//问题1//循环开始

if (a%2 == 1)
return x*t*t;

return t*t;
}//循环结束
int main(){
cout<<pow1(2,11)<<endl;
getchar();
}

新手有很多不理解 单步执行了
问题1:发现这里的 a/2 会自动去整,是因为 pow1(double x, int n)么?
问题2:另外对递归的概念理解不清楚,为什么单步执行时在 问题1 处 循环开始(已标注),在结尾处循环结束(已标注),同时a的值恢复了(又从小变大,每次*2)?
谢谢
...全文
114 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
www_adintr_com 2014-06-05
  • 打赏
  • 举报
回复
1. 两个整数运算结果也是整数, 整数除法的结果是商和余数,不是浮点数, 用 / 得到商,用 % 得到余数。 和 pow1(double x, int n) 什么的没关系。 2. 递归的时候里面一层变量值得改变不会影响到外面一层的变量。 也就是说第一次调用 pow1 时的 a 变量和里面第二层调用 pow1 时的 a 变量时不同的变量,它们有不同的地址,一个改变不会影响另外一个。
乐哉悠哉 2014-06-05
  • 打赏
  • 举报
回复
使用 a/2.0 可消除运算自动取整。
buyong 2014-06-05
  • 打赏
  • 举报
回复
会取整。 if (a%2 == 1) return x*t*t; 特殊处理了a是奇数的情况
klmn111aaa 2014-06-05
  • 打赏
  • 举报
回复
引用 3 楼 adlay 的回复:
1. 两个整数运算结果也是整数, 整数除法的结果是商和余数,不是浮点数, 用 / 得到商,用 % 得到余数。 和 pow1(double x, int n) 什么的没关系。 2. 递归的时候里面一层变量值得改变不会影响到外面一层的变量。 也就是说第一次调用 pow1 时的 a 变量和里面第二层调用 pow1 时的 a 变量时不同的变量,它们有不同的地址,一个改变不会影响另外一个。
非常感谢!完全明白了!

64,649

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧