1.1.18请看以下递归函数:
public static int mystery(int a,int b)
{
if (b==0) return 0;
if (b%2==0) return mysetery(a+a,b/2);
return mystery(a+a,b/2)+a;
}
mystery(2,25)和mystery(3,11)的返回值是多少?给定正整数a和b,mystery(a,b)计算的结果是什么?将代码中的+替换为*并将return 0改为return 1,然后回答相同的问题。
1)解:按2,25画出递归树,b%2==0时生成右子树,b%2!=0时即b%2==1时生成左子树,余数串即是十进制25的二进制表示。
![图片](http://r.photo.store.qq.com/psb?/f33bb27a-608a-4097-811a-86bbde18cf7a/22feG*l9oyPlhnfMrNnyuB7uqQWf8tyNKYmVwlXD664!/o/dKUAAAAAAAAA&ek=1&kp=1&pt=0&bo=gAJVA7AEQAYFAAU!&tl=1&su=03502273&tm=1540436400&sce=0-12-12&rf=2-9)
2)按上图类似解法得a^b。
public static int mystery(int a,int b)
{
if (b==0) return 0;
if (b%2==0) return mysetery(a+a,b/2);
return mystery(a+a,b/2)+a;
}
mystery(2,25)和mystery(3,11)的返回值是多少?给定正整数a和b,mystery(a,b)计算的结果是什么?将代码中的+替换为*并将return 0改为return 1,然后回答相同的问题。
1)解:按2,25画出递归树,b%2==0时生成右子树,b%2!=0时即b%2==1时生成左子树,余数串即是十进制25的二进制表示。
2)按上图类似解法得a^b。