在做一道练习题(参照下篇博文《在当前目录下递归的查找包含指定字符串的文件》)的时候,发现函数中的return的值竟然是None,百思不得其解,尝试化繁为简,用以下的简单的代码验证了一下

问题版本代码:为什么return i 返回的是 i , 而print(i)得到的是 0

def func(i):
    if i == 0:
        print(i)
        return i
    elif i > -2:
        i = i-1
        func(i)

print(func(3))

运行结果:
0
None

如果把递归过程画成流程图,或许更容易理解一些

case1: 有递归的情况

case2: 无递归的情况

错误的解决方案:

def func(i):
    if i == 0:
        print(i)
        return i
    elif i > -2:
        i = i-1
        func(i)
        return(i)

print(func(3))

运行结果:
0

仍然图解一下,更直观

正确的解决方案一:

def func(i):
    if i == 0:
        print(i)
        return i
    elif i > -2:
        i = i-1
        return(func(i))

print(func(3))

运行结果:
0
0

正确的解决方案二:

result = None
def func(i):
    if i == 0:
        print(i)
        global result
        result = i
    elif i > -2:
        i = i-1
        func(i)
    return result

print(func(3))

运行结果:
0
0

参考文章

https://www.cnblogs.com/yechenkai/p/7143475.html

https://www.cnblogs.com/lincappu/p/8146141.html

最新文章

  1. LeetCode——Copy List with Random Pointer(带random引用的单链表深拷贝)
  2. Ubuntu中安装eclipse ,双击eclipse出现invalid configuration location问题
  3. BZOJ3641 : 货车运输
  4. OA系统权限管理设计(转载)
  5. HDU_2041——走楼梯,递推
  6. python运维开发(十)----IO多路复用线程基本使用
  7. bzoj 3224: Tyvj 1728 普通平衡树 替罪羊树
  8. asp.net微软认证全新考试题库及答案1
  9. mysql常用基础操作语法(十二)~~常用数值函数【命令行模式】
  10. CSS揭秘(三)形状
  11. TensorFlow与OpenCV,读取图片,进行简单操作并显示
  12. tkinter调取签名网而设计签名页面
  13. MYSQL水平拆分与垂直拆分
  14. Codeforces 436E Cardboard Box (看题解)
  15. 全文检索的Demo
  16. C++Primer第五版——习题答案详解(七)
  17. 为什么C++函数形参默认值从最末一个赋值?
  18. eclipse windowbuilder palette 空白
  19. 《Android源代码设计模式解析与实战》读书笔记(十)
  20. 二叉树的遍历——Morris

热门文章

  1. Server Objects Extension(SOE)开发(二)
  2. 密码硬编码(Password Management: Hardcoded Password)
  3. boost之时间timer
  4. 构建Ruby开发环境(Windows+Eclipse+Aptana Plugin)
  5. django-admin 设计User外键,设计model
  6. SourceTree的基本使用---基本介绍/本地开发
  7. Linux服务器iops性能测试-fio
  8. C++友元概念
  9. bfc (收集的)
  10. Linux Shell基础 通配符