# 0.定义一个函数，求一元二次方程的解
# ax2 + bx + c = 0



# 1.定义一个函数，计算任意个数字的乘积


# 2.数列求和(使用3种方法完成)
# 有数列为：9，99，999，...，9999999999。要求使用程序计算此数列的和，并在控制台输出结果。
# 6,66,666....

# 递归
def f(n):
    if n == n%10:
        return n
    return n + f(int(n/10))

print(f(111))




# 3. 有数列：1/1+1/2+1/3…+1/n（n>=2）。
#     要求使用交互的方式计算此数列的和：用户在控制台录入需要计算的整数 n 的值，
#     程序计算此数列的和，并在控制台输出结果。



# 4. 打印九九乘法表(双重循环)
# 1*1=1
# 1*2=2 2*2=4
# ....  
def g():
    for i in range(1,10):
        for j in range(1,i+1):
            print('%d*%d=%d'%(j,i,i*j),end='\t')
        print()

g()



# 5. 使用冒泡排序法对下面的列表进行升序排序:(双重循环)(选做)
#     [23,8,33,4,88] -> [4,8,23,33,88]

'''
1   [23,8,33,4,88]
    8  23 33 4 88
    8  23 33 4 88
    8  23 4 33 88
    8  23 4 33 88
    比了4次

2   8  23 33 4 88
    8  23 33 4 88
    8  23 33 4 88
    8  23 4 33 88
    比了3次



'''
def h(l):
    for i in range(len(l)-1): # 外层循环控制轮数
        for j in range(len(l)-(1+i)):
            if l[j] > l[j+1]:
                # 交换元素位置
                t = l[j]
                l[j] = l[j+1]
                l[j+1] = t
    return l

print(h([23,8,33,4,88]))

# 6. 用递归函数实现fibonacci数列某一项的求解
#     1 2 3 4 5 6 7
#     1 1 2 3 5 8 13...

def fab(n):
    if n == 1 or n == 2:
        return 1
    return fab(n-1)+fab(n-2)


# 7. 用递归实现汉诺塔游戏(选做)
#    规则:一次只能移动一个盘子
#        小盘子永远要在大盘子的上面
#     输出结果：
#     A —> B
#     A -> C
#     B -> C
#     move(n,a,b,c)

def move(n,a,b,c):
    if n == 1:
        print(a,'->',c)
    else:
        move(n-1,a,c,b)
        move(1,a,b,c)
        move(n-1,b,a,c)

move(3,'A','B','C')

# 8. 用while循环实现阶乘
