阶乘,幂和二分查找

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提供标准的二分查找

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值