基本概念
1. 穷举法
穷举法
:是猜测与检验算法的一个变种。我们枚举所有可能性,直至得到正确答案或者尝试完所有值。
#寻找完全立方数的立方根
x = int(input('Enter an integer: '))
ans = 0
while ans**3 < abs(x):
ans = ans + 1
if ans**3 != abs(x):
print(x, 'is not a perfect cube')
else:
if x < 0:
ans = -ans
print('Cube root of', x,'is', ans)
那么,对于何种x值,程序能正常结束呢?答案是“所有整数”。
注
:
1.表达式ans**3的值从0开始,并随着每次循环逐渐变大;
2.当这个值达到或超过abs(x)时,循环结束;
3.因为abs(x)的值总为正,所以循环结束前进行的迭代次数必然是有限的。编写循环时,应该使用一个合适的递减函数。这个函数具有如下属性:
- 它可以将一组程序变量映射为一个整数;
- 进入循环时,它的值是非负的;
- 当它的值≤0时,循环结束;
- 每次循环它的值都会减小。
2. for循环
for循环中常用到range()函数
,因此先对它进行介绍:
- range函数接受3个整数参数:start、stop和step。生成一个数列:start、start + step、start + 2*step,等等。
- 如果step是正数,最后一个元素就是小于stop的最大整数start + i * step。如果step是负数,最后一个元素就是大于stop的最小整数start + i * step。
- 数列中的数值是以“按需产生”的原则生成的,所以即使range(1000000)这样的表达式也只占用很少内存。
#寻找完全立方数的立方根
x = int(input('Enter an integer: '))
for ans in range(0, abs(x)+1):
if ans**3 >= abs(x):
break
if ans**3 != abs(x):
print(x, 'is not a perfect cube')
else:
if x < 0:
ans = -ans
print('Cube root of', x,'is', ans)
3. 近似解和二分查找
穷举法
是一种查找技术,只在被查找集合中包含答案时才有效
#使用穷举法求近似平方根
x = 25
epsilon = 0.01
step = epsilon**2
numGuesses = 0
ans = 0.0
while abs(ans