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的二进制表示。
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的二进制表示。
![图片](https://i-blog.csdnimg.cn/blog_migrate/e69205678bf5002974f43ec448335f3a.jpeg)
2)按上图类似解法得a^b。