循环与递归
递归:无限调用自身这个函数,每次调用总会改动一个关键变量,直到这个关键变量达到边界的时候,不再调用。
递归与循环的区别?
相同点:
(1)都是通过控制一个变量的边界(或者多个),来改变多个变量为了得到所需要的值,而反复而执行的;
(2)都是按照预先设计好的推断实现某一个值求取;(请注意,在这里循环要更注重过程,而递归偏结果一点)
不同点:
(1)递归通常是逆向思维居多,“递”和“归”不一定容易发现(比较难以理解);而循环从开始条件到结束条件,包括中间循环变量,都需要表达出来(比较简洁明了)。
简单的来说就是:用循环能实现的,递归一般可以实现,但是能用递归实现的,循环不一定能。
因为有些题目①只注重循环的结束条件和循环过程,而往往这个结束条件不易表达(也就是说用循环并不好写);
②只注重循环的次数而不注重循环的开始条件和结束条件(这个循环更加无从下手了)。
eg:用循环的方法计算1-5的和?
def get_sum(n):
num=0
for i in range(n+1):
num+=i
return num
print(get_sum(5))
输出结果:15
eg:用循环的方法计算1-5的乘积?
def get_sum(n):
num=1
for i in range(1,n+1):
num*=i
return num
print(get_sum(5))
输出结果:120
递归:
eg:用递归的方法计算某一个数以内的偶数和?
def mul(n):
if n>1 and n%2==0:
return mul(n-2)+n
elif n>1 and n%2==1:
return mul(n-3)+n-1
elif n==0:
return 0
print(int(mul(7)))
输出结果:12
斐波那契数列算法
eg:确定某一位的斐波那契数?
def dif(n):
return dif(n-1)+dif(n-2) if n>2 else 1
print(int(dif(5)))
输出结果:5
def dif1(n):
a = 0
b = 1
for i in range(n):
b = a + b
a = b - a
return a
print(dif1(5))
输出结果:5