python函数写二分法 python中的二分法

各位大神好,本菜鸟初学python,请问如何用递归来实现二分法算法呢?我自己编了个,但是不明白哪里错了

因为你改变了列表l的大小,所以它输出的不是在原列表l的序号,而是在子列表的序号

创新互联建站主营青浦网站建设的网络公司,主营网站建设方案,成都App制作,青浦h5小程序制作搭建,青浦网站营销推广欢迎青浦等地区企业咨询

因此不改变列表l,而只需要改变搜索范围,就能找到数的正确位置了.

完整的程序如下(改动的地方见注释)

def erfenfa(l,num,low,high): #这里增加两个参数

#low=0 #这里去掉这句

#high=len(l)-1 #这里去掉这句

mid=int((low+high)/2)#这里把len(l)/2改成(low+high)/2

if lowmid: #这里把len(l)1改成lowmid

if numl[mid]:

#l1=l[mid:] #这里去掉这句

erfenfa(l,num,mid,high) #这里增加两个参数

elif numl[mid]:

#l2=l[:mid] #这里去掉这句

erfenfa(l,num,low,mid) #这里增加两个参数

elif num==l[mid]:

print('exist',mid)

else:

print('not exist')

#return None #这里去掉这句

l=[1,2,3,10,20,30,50,60,100]

erfenfa(l,50,0,len(l)-1)

源代码(注意源代码的缩进)

谁会用python写个二分法查找的循环

#!/usr/bin/env python  

import sys   

def search2(a,m):  

low = 0   

high = len(a) - 1   

while(low = high):  

mid = (low + high)/2  

midval = a[mid]  

if midval  m:  

low = mid + 1   

elif midval  m:  

high = mid - 1   

else:  

print mid   

return mid   

print -1  

return -1  

if __name__ == "__main__":  

a = [int(i) for i in list(sys.argv[1])]  

m = int(sys.argv[2])  

search2(a,m)

python 二分法解方程

def erfen(low,high):

while low high:

mid=(low+high)/2

if f(low)*f(mid)0:

high=mid

elif f(mid)*f(high )0:

low=mid

return mid

这个函数没有结束 检查一下如何设置退出条件

用python二分法求平方根,这个程序为什么错了?

首先二分法肯定需要一个“不断”二分的过程, 你的代码里面连一个循环都没有,肯定是不对的吧?

其次按照你的代码的思路,如果当前估算值guess的平法比x大,那就往0那边靠,否则就往1那边靠,这个好像也不对吧?

二分法的实现方法应该是,在区间[left, right]里面找x的开方,令估算值为guess等于区间的中点,如果guess比实际的大,那就把区间缩小一半,令到右端点移动到中点,如果guess比实际的小,也是将区间缩小一半,但是是令左端点移动到中点。这样每次缩小一半的区间,直到区间的长度非常非常小,那就认为区间的两个端点是相等的了,这个时候就得到了答案。

import math

def main():

x = input('x=')

n = 0

if x = 1 and x = 0:

left = 0.

right = 1.

while right - left = 0.0000001:

guess = (left + right) / 2.

if guess ** 2 - x = 0.0000001:

right = guess

else:

left = guess

#return guess

print 'sqrt(x) is', left

else:

print 'x should be in [0,1]'

if __name__ == '__main__':

main()

我按照你的思路又写了另外一种方法:

def second():

x = input('x=')

n = 0

if x = 1 and x = 0:

movelen = (1 + 0) / 4.

guess = (1 + 0) / 2.

while abs(guess ** 2 - x) = 0.0000001:

if (guess ** 2 - x) = 0.0000001:

guess = guess - movelen

else:

guess = guess + movelen

movelen = movelen / 2.

print 'sqrt(x) is', guess

else:

print 'x should be in [0,1]'

关于python里的二分法?

因为他已经把middle位置上的数字已经检查过了,第一个if条件就是判断middle位置山的数字是不是想要的,既然这个条件不满足,那么就肯定不需要他,所以从他的上一位或下一位重新开始

利用Python语言计算方程的根

import math

def erfenfa(function, a, b): #定义函数,利用二分法求方程的根,function为具体方程,a,b为根的取值范围

start = a

end = b

if function(a) == 0: 

return a

elif function(b) == 0:

return b

elif function(a) * function(b) 0: 

print("couldn't find root in [a,b]")

return

else:

mid = (start + end) / 2

while abs(start - mid) 0.0000001: 

if function(mid) == 0:

return mid

elif function(mid) * function(start) 0:

end = mid

else:

start = mid

mid = (start + end) / 2

return mid

def f(x):#定义构造方程式函数

return math.pow(x, 5) -15*math.pow(x, 4) +85*math.pow(x, 3)-225*pow(x,2)+274*x - 121

print(round(erfenfa(f, 1.5, 2.4),6))


网页名称:python函数写二分法 python中的二分法
网页URL:http://pwwzsj.com/article/dodceeg.html