python 递归函数与return
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python 递归函数与return相关的知识,希望对你有一定的参考价值。
def fact(n):
if n==1:
return 1
return n * fact(n - 1)
return 是怎么把递归函数给返回出来
麻烦对过程详细的说一下
以上的递归函数相当于:
>>> def fact(n):
if n==1:
return 1
else:
return n*fact(n-1)
>>> fact(1)
1
>>> fact(5)
120
>>>
比如fact(5)的迭代过程可以表示为:
参考技术Areturn之前要执行的。
给你举个简单例子
def add(a, b):return a + b
这个例子很简单,但是说明了函数return之前要执行a+b这个操作
a+b也可以当做一个函数
在复杂一点
def multi(a, b):return a * b
def add(a, b):
return a + multi(a, b)
同样这里在add函数中, 执行return之前,要先把a+mulit(a,b )在返回
如果这就是你迷惑的地方,那就选我把- -~
比如说fact(5)return 返回120点值 为什么不是返回5*4的值?
追答这就是递归啦。
你要求fact(5) 先求fact(4)
你有两个return,当n>1 的时候会一直递归下去
你的递归终止条件是 n ==1 。
这些概念性质的东西 要多看书哦
所以没有什么过程,就是从函数、递归里跳出来了。 参考技术C fact(1) -> 1
fact(2) -> 2 * fact(1) -> 2 * 1 = 2
fact(3) -> 3 * fact(2) -> 3 * 2 * fact(1) - ? 3 * 2 * 1 = 6
.....
python基础:递归函数返回值(return)误区
return语句用于退出函数,向调用方返回一个表达式。return在不带参数的情况下(或者没有写return语句),
默认返回None。None是一个特殊的值,它的数据类型是NoneType。NoneType是Python的特殊类型,它只有一个取值None。
它不支持任何运算也没有任何内建方法,和任何其他的数据类型比较是否相等时永远返回false,也可以将None赋值给任何变量。。。
1》当函数没有显式return,默认返回None值
2》当递归函数有return时,在递归的地方也要return,不然永远返回的是None
1 import time 2 def binary_search(data,find_n): 3 Len=len(data) 4 if Len==1: 5 if data[0]==find_n: 6 #print("找到,在第%d个" %(1)) 7 return 1 8 else: 9 #print("没找到") 10 return 0 11 elif Len==2: 12 if data[0]==find_n: 13 #print("找到,在第%d个" %(1)) 14 return 1 15 elif data[1]==find_n: 16 #print("找到,在第%d个" %(2)) 17 return 1 18 else: 19 #print("没找到") 20 return 0 21 else: 22 mid_n=int(Len/2) 23 mid_val=data[mid_n] 24 if mid_val==find_n: 25 #print("找到,在第%d个" %(mid_n+1)) 26 return 1 27 elif mid_val<find_n: 28 right_val=data[mid_n:] 29 return binary_search(right_val,find_n) 30 else: 31 left_val=data[:mid_n] 32 return binary_search(left_val,find_n) 33 34 def split_data(n): 35 start=0 36 stop=1000 37 flag=1 38 Len=n 39 while flag: 40 if Len>1000: 41 data=[x for x in range(start,stop,1)] 42 yield data 43 start=start+1000 44 stop=stop+1000 45 Len=Len-1000 46 else: 47 data=[x for x in range(start,n,1)] 48 yield data 49 flag=0 50 51 52 if __name__=="__main__": 53 t0=time.time() 54 for data in split_data(10000000000000): 55 f=binary_search(data,999999999) 56 #print(f) 57 if f: 58 print("已找到") 59 break 60 t1=time.time()-t0 61 print(t1)
elif mid_val<find_n:
right_val=data[mid_n:]
return binary_search(right_val,find_n)
else:
left_val=data[:mid_n]
return binary_search(left_val,find_n)
以上是关于python 递归函数与return的主要内容,如果未能解决你的问题,请参考以下文章