Algs4-1.1.18递归函数在做什么

 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。
posted @ 2018-10-25 11:09  修电脑的龙生  阅读(288)  评论(0编辑  收藏  举报