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)的迭代过程可以表示为:

参考技术A

return之前要执行的。

给你举个简单例子

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 。
这些概念性质的东西 要多看书哦

本回答被提问者和网友采纳
参考技术B return 就是跳出、返回的意思。
所以没有什么过程,就是从函数、递归里跳出来了。
参考技术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)
View Code

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的主要内容,如果未能解决你的问题,请参考以下文章

06python 中的递归函数(python函数)

Python递归函数与匿名函数

python基础:递归函数返回值(return)误区

python第五周,函数的定义与使用,代码复用与函数递归

python中的递归函数

关于python递归函数怎样理解