埃及分数式

问题描述

分子是1的分数,叫做单位分数.古代埃及人在进行分数运算时,只使用分子是1的分数,依次这种分数也叫埃及分数式,或者叫单分子分数.
要求随便输入一个真分数,将该分数分解为埃及分数式,如 3/7 = 1/3 + 1/11 + 1/231.

算法思路

  • 埃及分数式式"不定长"的问题,这种不好循环,所以采用递归的思路
  1. 对于一个真分数a/b,找到最接近的1/k
  2. 如果b % a == 0 => k = b/a
    如果b % a != 0 => k = b/a + 1

代码示例

Python

# 递归思路 => 具体个数是不知道的

def fun(a, b):
    k = int(b / a)
    if b % a == 0:
        res = "1/%s" % k
    else:
        k += 1
        res = "1/%s + %s" % (k, fun(a * k - b, b * k))
    return res

print(fun(3, 8))

Java


// 埃及分数式 => 递归
public class 埃及分数式 {

    // a: 分子 b: 分母
    static String fun(int a, int b) {
        String res = "";
        int k = b / a;
        if (b % a == 0) {
            res += "1/"+k;
        }else{
            k++;
            res += "1/"+k+" + "+fun(a * k -b,b*k);
        }
        return res;
    }

    public static void main(String[] args) {
        System.out.println(fun(3,7));
    }

}

猜你喜欢

转载自www.cnblogs.com/Rowry/p/11823786.html