一.函数
1.函数的定义
1.函数是指⼀段可以直接被另⼀段程序或代码引⽤的程序或代码。也叫做⼦程
序、⽅法。
2.⼀个较⼤的程序⼀般应分为若⼲个程序块,每⼀个模块⽤来实现⼀个特定的功能。所有的⾼级语⾔中都有⼦程序这个概念,⽤⼦程序实现模块的功能。在C语⾔中,⼦程序的作⽤是由⼀个主函数和若⼲个函数构成。由主函数调⽤其他函数,其他函数也可以互相调⽤。同⼀个函数可以被⼀个或多个函数调⽤任意多次。
3.在程序设计中,常将⼀些常⽤的功能模块编写成函数,放在函数库中供公共选⽤。要善于利⽤函数,以减少重复编写程序段的⼯作量。
4.函数分为全局函数、全局静态函数;在类中还可以定义构造函数、析构函数、拷⻉构造函数、成员函数、友元函数、运算符重载函数、内联函数等。
2.函数的作用
1,减少重复代码
2,方便修改,更易于扩展(加减功能)
3,保持代码一致性(便于一修改一致修改)
二.递归
递归的能⼒在于⽤有限的语句来定义对象的⽆限集合。⼀般来说,递
归需要有边界条件、递归前进段和递归返回段。当边界条件不满⾜时,
递归前进;当边界条件满⾜时,递归返回。
递归三要素:
1、明确递归终⽌条件;
2、给出递归终⽌时的处理办法;
3、提取重复的逻辑,缩⼩问题规模。
递归实现数的阶乘:
def recursion(n):
if(n==0):
return 0
if(n==1):#递归终⽌条件
return 1 #终⽌时不再向下传递,⽽是进⾏合适的操作。
else:
return (n*recursion(n-1)) #⽐如阶乘的逻辑 n! = n*n-1*(n-1)-1*....
三.递归练习
a是⼀个数组, b也是⼀个数组,b中的数据是a中的数据逐项累加得到的。
尝试使⽤递归实现
a=[x1,x2,x3,x4,x5,x6]
b[0]=x1 b[1]=x1+x2 b[2]=x1+x2+x3 …
a = [1, 1, 5, 3, 7, 3, 2]
b = []
def fun(a, b):
if len(b) == 0:
b.append(a[0])
if len(b) < len(a):
b.append(0)
b[len(b) - 1] = b[len(b) - 2] + a[len(b) - 1]
return fun(a,b)
else:
print(b)
print(fun(a, b))
四.二分查找法
二分搜索是一种在有序数组中查找某一特定元素的搜索算法。搜索过程从数组的中间元素开始,如果中间元素正好是要查找的元素,则搜索过程结束;如果某一特定元素大于或者小于中间元素,则在数组大于或小于中间元素的那一半中查找,而且跟开始一样从中间元素开始比较。如果在某一步骤数组为空,则代表找不到。这种搜索算法每一次比较都使搜索范围缩小一半
def binarySearch(arr, l, r, x):
# 基本判断
if r >= l:
mid = int(l + (r - l) / 2)
# 元素整好的中间位置
if arr[mid] == x:
print("元素在数组中的索引为 %d" % (mid + 1))
# 元素小于中间位置的元素,只需要再比较左边的元素
elif arr[mid] > x:
return binarySearch(arr, l, mid - 1, x)
# 元素大于中间位置的元素,只需要再比较右边的元素
else:
return binarySearch(arr, mid + 1, r, x)
else:
# 不存在
print('元素不在数组中')
# 测试数组
arr = [2, 3, 4, 5, 6, 7, 10, 40,50,70,90]
x = 6
binarySearch(arr, 0, len(arr)-1, x)