zoukankan      html  css  js  c++  java
  • 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)

  • 相关阅读:
    sql声明变量,及if -else语句、while语句的用法
    视图、事务
    索引
    相关子查询
    递归实现treeView下的省市联动
    创建sqlhelp类以封装对数据库的操作及对可空类型的操作
    ADO.Net操作数据库
    sql的case语句
    vue父组件异步数据子组件接收遇到的坑
    第一次用angularJS做后台管理点滴
  • 原文地址:https://www.cnblogs.com/yizhenfeng168/p/6933600.html
Copyright © 2011-2022 走看看