python算法二:迭代法

1.定义:迭代法也称辗转法,是一种不断用变量的旧值递推新值的过程,跟迭代法相对应的是直接法(或者称为一次解法),即一次性解决问题。迭代算法是用计算机解决问题的一种基本方法,它利用计算机运算速度快、适合做重复性操作的特点,让计算机对一组指令(或一定步骤)进行重复执行,在每次执行这组指令(或这些步骤)时,都从变量的原值推出它的一个新值,迭代法又分为精确迭代和近似迭代。比较典型的迭代法如“二分法”和"牛顿迭代法”属于近似迭代法。

例题1:求1+2+3+......+100的和

分析:要想求前100项的和,可以先求出前第一项的和,再求出前第二项的和,,,s变量中的值不断迭代,直到将第100个数加入到s变量中。

代码如下:

s=0
for i in range(1,101):
    s=s+i
print(s)

例题2:一个正整数的阶乘是所有小于及等于该数的正整数的积,并且0的阶乘为1,即n!=1×2×3×…×(n-1)×n。现求正整数n的阶乘。

分析:

1.增加一个变量,存储结果,做好初始赋值。

2.使用计数循环结构for语句进行循环,使用range()函数生成一个数列,指定函数初始值为1,范围值为n+1,变化增量为1时可以省略。

3.在循环体内,进行迭代,并将计算结果作为下一次的初始值。

4.循环结束后,打印输出结果

代码如下:

num = int(input("请输入一个数字: "))
f=1 #赋初值
for i in range(1,num+1):
    f = f*i
print("%d 的阶乘为 %d" % (num, f))

例题3:兔子数列(斐波那契数列)

有对兔子,从出生后的第3个月起每个月都生一对兔子。 小兔子长到第3个月后每个月又生一对兔子, 假设所有的兔子都不死,问30个月后的兔子总对数为多少?

代码如下:

def fibo(n):
    f1=f2=1
    for i in range(3,n+1):
        f1,f2=f2,f1+f2
    return f2
print(fibo(30))

例题4:输入两个数,求出这两个数的最大公约数。

代码如下:

num1=int(input('请输入第一个正整数:'))
num2=int(input('请输入第二个正整数:'))
m = max(num1, num2)
n = min(num1, num2)
r = m % n
while r != 0:
    m = n
    n = r
    r = m % n
print('这两个数的最大公约数为:',   n)
input("运行完毕,请按回车键退出...")

使用自定义函数改写:

def gcd(m,n):
    r = m % n
    while r != 0:
        m = n
        n = r
        r = m % n

num1=int(input('请输入第一个正整数:'))
num2=int(input('请输入第二个正整数:'))
print('这两个数的最大公约数为:',gcd(num1,num2))
input("运行完毕,请按回车键退出...")

猜你喜欢

转载自blog.csdn.net/qq_28782419/article/details/128187847