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

新手求教一个算法题Implement pow(x, n),单步执行时有些地方不太明白,谢谢!!!
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)?
谢谢
------解决方案--------------------
1. 两个整数运算结果也是整数, 整数除法的结果是商和余数,不是浮点数, 用 / 得到商,用 % 得到余数。 和 pow1(double x, int n) 什么的没关系。
2. 递归的时候里面一层变量值得改变不会影响到外面一层的变量。 也就是说第一次调用 pow1 时的 a 变量和里面第二层调用 pow1 时的 a 变量时不同的变量,它们有不同的地址,一个改变不会影响另外一个。