python循环、递归

Python018

python循环、递归,第1张

for 变量 in range(次数):<被执行的语句>                       变量:表示每次循环的次数,0-1之间

range(n)n表示产生0到n-1的整数序列共N个               range(m,n)  产生m到n-1的整数序列,共n-m个

循环for语句  :for 循环变量 in遍历结构:<语句体1>  else:<语句体2> 

无限循环: while条件: 语句块

while 条件:语句体1 else: 语句体2

循环保留字:break     continue

方法1:from random import random

from time import perf_counter

DARTS=1000

hits=0.0

start =perf_counter()

for i in range(1,DARTS+1):

    x,y=random(),random()

    dist=pow(x**2+y**2,0.5)

    if dist<=1.0:

        hits =hits+1

    pi=4*(hits/DARTS)

    print("圆周率是:{}".format(pi))

    print("运行时间是{:.5f}s".format(perf_counter()-start))

方法2:

pi=0

n=100

for k in range(n):

    pi += 1/pow(16,k)*(\

        4/(8*k+1)-2/(8*k+4) - \

        1/(8*k+5) - 1/(8*k+6))

print("圆周率值是:{}".format(pi))

def 函数名 (0个或者多个):函数体  renturn 返回值

def 函数名 (非可选参数,可选参数):函数体  renturn 返回值

参数传递的两种方式:位置传递,名称传递

科赫雪花:

import turtle

def koch(size,n):

    if n==0:

        turtle.fd(size)

    else:

        for angle in [0,60,-120,60]:

            turtle.left(angle)

            koch(size/3,n-1)

def main():

    turtle.setup(400,200)

    turtle.penup()

    turtle.pendown()

    turtle.pensize(2)

    l=3

    koch(600,l)

    turtle.right(120)

    turtle.pencolor('blue')

    koch(600,l)

    turtle.right(120)

    turtle.pencolor('red')

    koch(600,l)

    turtle.speed(3000)

    turtle.hideturtle()

main()

阶乘

def fact(n):

    s=1

    for i in range(1,n+1):

        s*=i

    return s

c=eval(input("从键盘输入一个数字"))

print("阶乘结果",fact(c))

python求n的阶乘代码

解法一:循环。思路比较简单,就是定义一个变量ns赋予一个初始值1,然后利用for循环直接累乘得到最终结果。

解法二:递归递归也比较好理解,当n==2,return2*1;n==3,return3*(2*1);n==4,return4*(3*(2*1))。以此类推,再将最终的结果赋予res将其打印即可。这两种方法都比较简单,但很显然都不符合题目要求的“使用一个数组A来表示一个大整数a,A[0]表示a的个位,A[1]表示a的十位”,所以我们要想办法利用数组来得到n!的结果。

解法三:数组

首先定义一个ns数组用来存储n!的各个位数上的数值,利用for循环给ns加入10000个0值,以方便后面直接根据index对数组进行操作。

然后定义length作为“数组的长度”(有真实数值的而非自动添加的0)也即n!的结果的位数。之后也必须用到for循环进行累乘,但跟解法一的直接累乘不同,这里是乘数(即i)跟各个位上的数分别相乘,若结果大于等于10则carry>0即向前进一位数值为carry,若j循环结束后carry>0则说明需要在当前ns的“长度”上进一位,所以length+1即位数+1,这里carry起的就是判断是否进位的作用,而length则代表着结果的位数。

如图所示:

阶乘介绍:

基斯顿·卡曼(Christian Kramp,1760~1826)于 1808 年发明的运算符号,是数学术语。

一个正整数的阶乘(factorial)是所有小于及等于该数的正整数的积,并且0的阶乘为1。自然数n的阶乘写作n!。1808年,基斯顿·卡曼引进这个表示法。

亦即n!=1×2×3×...×(n-1)×n。阶乘亦可以递归方式定义:0!=1,n!=(n-1)!×n。