算法-第四版-练习1.1.18解答

问题

请看以下递归函数:

public static int mystery(int a, int b)
{
    if (b == 0) return 0;
    if (b % 2 == 0) return mystery(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然后回答相同的问题。

解决思路

相当于计算a*b。

代码

package com.furzoom.lab.algs.ch101;

public class E10118
{
    public static int mystery(int a, int b)
    {
        if (b == 0) return 0;
        if (b % 2 == 0) return mystery(a+a, b/2);
        return mystery(a+a, b/2) + a;
    }

    public static int mystery2(int a, int b) {
        if (b == 0) return 1;
        if (b % 2 == 0) return mystery(a*a, b/2);
        return mystery(a*a, b/2) * a;
    }

    public static void main(String[] args)
    {
        System.out.println(mystery(2, 25));
        System.out.println(mystery(3, 11));

        System.out.println(mystery2(2, 25));
        System.out.println(mystery2(3, 11));
    }

}

结果

50
33
96
135
已标记关键词 清除标记
©️2020 CSDN 皮肤主题: 编程工作室 设计师:CSDN官方博客 返回首页