1,阶乘
阶乘的数学定义,可表述如下:
○1的阶乘为1
○对于大于1的数字,它的阶乘为(n-1)的阶乘*n
这在数学上很有用
例如:计算n个人排成一队有多少种方式
def factorial(n):
result=n
for i in range(1,n):
result*=1
return result
大致而言,它是这样做的:首先将result设置为n,再将其依次和1到n-1每个数字相乘,最后返回result
当然了。你也可以采取不一样的方法。
例如:可以根据上面的定义编写代码
def factorial(n):
if n==1:
return 1
else:
return n*factorial(n-1)
这是对定义的直接实现。
2.幂
首先要简单的定义幂,然后编写代码。
power(x,n)(x的n次幂)是将x和x相乘n-1的结果。即将n个x相乘
def power(x,n):
result=1
for i in range(n):
result*=x
return result
也可以修改为递归式的
○对于任何数字x,power(x,0)都为1
○n>0时,power(x,n)为power(x,n-1)与x的乘积
def power(x,n):
if n==0
return 1
else:
return x*power(x,n-1)
3.二分查找
如果你玩过猜数游戏的话,那你对此一定不会感到陌生。
比如:你要猜对方心里想的一个属于1——100之间的数字。猜对需要多少次呢?当然了,答案是不固定的。说不定一次就成功了。但最少需要多少次呢?(使用方法,而不是凭借直觉)。实际上需要7次。每次将范围缩小一半。即先问这个数大于50吗?以此类推。最终得出正确答案。
○若上限和下限相同,就返回这个数字
○否则,找到区间的中间位置(上下限平均值),再确定在那半个区间,然后以同样的方式继续寻找,直到找到为止。
def search(sequence,number,lower,upper):
if lower==upper:
assert number==seqence[upper]
return upper
else:
middle=(lower+upper)//2
if number>seqence[middle]:
return search(sequence,number,middle+1,upper)
else:
return search(sequence,number,lower,upper)
如果没有提供上下限,它们将默认为序列的第一个数字和最后一个数字。
模块bisect提供标准的二分查找