python求多项式的和 ,(递归与非递归)

求多项式J: J=j(n个j)
实例:假设n=3,j=5,则J=5+55+555=615
要求:
1.定义两个函数f1(x,y)和f2(x,y)
f1为非递归函数,f2为递归函数。两种不同的方式计算J的值,并返回计算结果。
2.输入的n和j都是正整数,0<j<10
3.在主程序中分别测试f1函数和f2函数,并输出J的值。

j=j+jj+jjj+jjjj+…+j…j(n个j)

img

def f1(x,y):
    s = 0
    t = 0
    for i in range(x):
        t = t*10+y
        s += t
    return s

def f2(x,y):
    if x==1:
        return y
    t = f2(x-1,y)
    return t*10+y*x


if __name__ == "__main__":
    n = int(input("请输入n:"))
    j = int(input("请输入j:"))
    J1 = f1(n,j)
    J2 = f2(n,j)
    if J1==J2:
        print("J:",J1)
    else:
        print("J1不等于J2")

def f1(x,y):
    n=0
    m=0
    for i in range(x):
        n=n+y*10**i
        m=m+n
    return m

def f2(x,y):
    if(x==1):
        return y
    return f2(x-1,y)*10+x*y

def main():
  x=int(input("输入正整数n"))
  y=int(input("输入正整数j,0<j<10"))
  if(f1(x,y)==f2(x,y)):
    print("J值为:"+str(f1(x,y)))
  else:
    print("失败")
main()
def f1(x,y):
    s = 0
    for i in range(x):
        for j in range(i+1):
            s += y*10**j
    return s
 
def f2(x,y):
    if(x==1):
        return x*y
    return f2(x-1,y)*10+x*y

n=int(input("输入正整数n:"))
j=int(input("输入正整数j,0<j<10:"))
J = f1(n,j)
print(f"非递归结果:{J}")
J= f2(n,j)
print(f"递归结果:{J}")
# 整体的思路是每次构建第n个数(jjj...jjj),然后加到结果里。
def f1(n, j):
    result = 0
    temp = 0
    for i in range(1, n+1):
        temp = temp * 10 + j
        result += temp
    return result
# 首先要明确递归的定义,令f2是返回从1个j到n个j相加而成的结果,则f2(1, j) = j,f2(2, j) = j + 10 * f2(1, j) + j, ... , f2(n, j) = j + 10 * (f2(n-1, j) - f2(n-2, j)) + f2(n-1, j),即:先构造出当前项(j + 10 * (f2(n-1, j) - f2(n-2, j))),再加上之前的累加和(f2(n-1, j)),直观但是显得复杂,仅供参考,可以借鉴其他大佬的代码。
def f2(n, j):
    if n == 1:
        return j # 当前项就是1个j。
    if n == 2:
        return 10 * j + j + j # 当前项为10*j + j,前一项为j。
    return j + 11 * f2(n-1, j) - 10 * f2(n-2, j) # 分析如上。