数据结构与算法一

循环与递归

递归:无限调用自身这个函数,每次调用总会改动一个关键变量,直到这个关键变量达到边界的时候,不再调用。
递归与循环的区别?
相同点:
(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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值