如上图,我们要求任意两个点的最接近的公共的父节点,比如:9和11的最近的公共父节点是2。
intput:
10 4
output:
2
分析:我们可以从所给的两个节点的开始向上找,一直找到他们相遇,选择每次让比较大的数字向上找(大的数字在同层,或者更深层。)
所以 递归可以写成
int rec(int x,int y)
{
if(x==y)//找到了公共父节点
return x;
else if(x>y)//x节点更深,寻找x的上一个节点
return rec(x/2,y);
else
return rec(x,y/2);
}