题意:       
        分子为1的分数称为埃及分数。现输入一个真分数(分子比分母小的分数,叫做真分数),请将该分数分解为埃及分数。
        如:8/11 = 1/2+1/5+1/55+1/110。
        注:真分数指分子小于分母的分数,分子和分母有可能gcd不为1!

方法一:
公式法


思路:
        
如果分母可以整除分子,跳出循环。


#include <bits/stdc++.h>

using namespace std;

int x,y;
char ch;

int main(){
    
    while(cin >> x >> ch >> y){//输入
        while(x!=1){
            if(y%x==0){
                y=y/x;
                x=1;
                break;
            }
            int z=y/x;//计算商
            int w=y%x;//计算余数
            cout << "1/" << z+1 << "+";
            x=x-w;//更新x
            y=y*(z+1);//更新y
        }
        printf("1/%d",y);
        cout << endl;
    }
    return 0;
}


时间复杂度:
空间复杂度:

方法二:
递归

思路:
        递归实现,思路与方法一相同。
        递归结束的条件是x==1y%x==0.
#include <bits/stdc++.h>

using namespace std;

//递归
void dfs(int x,int y){
    if(x==1){
        printf("1/%d\n",y);
        return;
    }
    if(y%x==0){
        printf("1/%d\n",y/x);
        return;
    }
    int z=y/x;//计算商
    int w=y%x;//计算余数
    cout << "1/" << z+1 << "+";
    x=x-w;//更新x
    y=y*(z+1);//更新y
    dfs(x,y);
}

int main(){
    int x,y;
    char ch;
    while(cin >> x >> ch >> y){//输入
        dfs(x,y);
    }
    return 0;
}

时间复杂度:
空间复杂度: