递归就是函数调用本身,来解决子问题,通过子问题的解构造本问题的解。

递归可以用于简化程序,让程序结构明了。。

调用者与被调用者之间有以下的四种数据传递关系:

1>没有任何数据传递

e.g. 打印链表void PrintList(ListNode const *list){ if(list == NULL) return; //exit cout << list->val << " "; PrintList(list->next);}

2> 调用者 <= === 被调用者

这是我们通常习惯的数据传递(通过解决子问题,来解决本问题)

e.g. 计算阶乘

int f(int n){ if(n == 0 || n == 1) return 1; return n * f(n-1);}

3> 调用者 = ===> 被调用者

其实我们从小学的数的加法运算就可以认为是这种情况。

115 + 126 = 241

低位运算结果(5+6=11)有进位,需要传递给被调用者

4> 调用者 <= ===> 被调用者

这个数据传递存在于那些子问题与本问题有相互的数据依赖性的时候。

给个例子,就会比较明了。

e.g. 用两个单链表表示两个非负整数,每个节点表示一个十进制位,整数反向存放。

(7->1->6->NULL)表示 617

(5->9->2->NULL)表示295

计算它们的和:结果是912,要求返回一个单链表表示和

分析:

低位数据相加可能产生进位,因此存在 调用者 ====> 被调用者 的数据传递

子问题必须返回链表的头节点指针,拼到当前和的后面, 因此存在 被调用者 ====> 调用者 的数据传递

Note: 要考虑两个链表长度不同等情况。

ListNode* SumOfListRecur(ListNode *lhs, ListNode *rhs, int flag)//flag表示进位{ int n(0); ListNode *sum(NULL), *end(NULL), *node(NULL); if(lhs == NULL && rhs == NULL && flag == 0)//exit return NULL; assert(lhs != NULL || rhs != NULL || flag != 0); n = flag; if(lhs) n += lhs->val; if(rhs) n += rhs->val; flag = n/10; n %= 10; node = new ListNode(n); sum = SumOfListRecur(lhs?lhs->next:NULL, rhs?rhs->next:NULL, flag); assert(node != NULL); node->next = sum; return node;}

0 0

python写出函数调用关系_函数递归调用: 调用者 与 被调用者之间的四种数据传递关系...相关推荐

  1. python写出雷霆战机_利用Python自制雷霆战机小游戏,娱乐编程,快乐学习!

    开发工具 Python版本:3.6.4 相关模块: pygame模块: 以及一些Python自带的模块. 环境搭建 安装Python并添加到环境变量,pip安装需要的相关模块即可. 先睹为快 在cmd ...

  2. python怎么画波浪线_国画知识:水很难画?四种常见画法图解教你,保证你一学就会画...

    俗话说:"水无常形",可见水是非常难画的,但是水真的很难画吗?只是你的画法不对而已,只要掌握好水的正确画法,画水其实很简单. 第一种:波浪法 波浪法顾名思义起笔画时就像波浪一样,用 ...

  3. python闭包和函数调用区别_函数闭包与可调用类

    请注意,由于之前在我的测试代码中发现了一个错误,我原来的答案是不正确的.修订版如下. 我做了一个小程序来测量运行时间和内存消耗.我创建了以下可调用类和一个闭包:class CallMe: def __ ...

  4. python写出雷霆战机_仿《雷霆战机》飞行射击手游开发--游戏的入口

    游戏的入口AppDelegate 游戏启动后,首先实例化的是AppDelegate这个类,这这个类里,我们需要修改两个函数:applicationDidFinishLaunching和applicat ...

  5. 怎么用Python写出随时间变化的字_面试必备 | 带你彻底搞懂 Python 生成器

    文章转载地址:面试必备 | 带你彻底搞懂 Python 生成器. 写在之前 Python 的高级语言特性一直是我们学习 Python 的一个难点,大部分人并没有做到熟练的掌握,甚至去学习它都感觉很困难 ...

  6. Python基础(三)_函数和代码复用

    三:函数和代码复用 (一)函数的基本使用 1.函数的定义 函数是一段具有特定功能的.可重用的语句组,用函数名来表示并通过函数名进行功能调用.函数也可以看作是一段具有名字的子程序,可以在需要的地方调用执 ...

  7. [Python] 绘制Python代码的函数调用关系:graphviz+pycallgraph

    [Python] 绘制Python代码的函数调用关系:graphviz+pycallgraph 文章目录 [Python] 绘制Python代码的函数调用关系:graphviz+pycallgraph ...

  8. python3_函数_形参调用方式 / 不定长参数 / 函数返回值 / 变量作用域 / 匿名函数 / 递归调用 / 函数式编程 / 高阶函数 / gobal和nonlocal关键字 / 内置函数

    1.形参的调用方式 1. 位置参数调用 2. 关键词参数调用 原则: 关键词参数调用不能写在位置参数调用的前边 def test1(name, age):print("name:" ...

  9. python编写程序输出诗句_RPA交流——使用 python 写出诗一样的代码 (一)

    原标题:RPA交流--使用 python 写出诗一样的代码 (一) 下载RPA请访问:www.i-search.com.cn 学习RPA请访问:https://support.i-search.com ...

最新文章

  1. python 网络爬虫学习笔记(一)
  2. 数据库设计规范之对象设计使用规范
  3. 面试mysql中怎么创建索引_阿里面试:MySQL如何设计索引更高效?
  4. jenkins查询mysql_jenkins流水线使用mysql数据库
  5. 51Nod 1283 最小周长
  6. 从零单排之玩转Python安全编程(II)
  7. 快速傅里叶变换python_【原创】OpenCV-Python系列之傅里叶变换(三十八)
  8. Spring Boot端口从默认更改为自定义或新端口
  9. 飞康力推“一次付费”的存储定价模式
  10. leetcode—19.二叉树遍历相关题目leetcode总结
  11. 决策树算法小结(一) ID3原理及代码实现
  12. Bitwise AND of Numbers Range
  13. 计算机网络技术与实验清华大学,清华大学计算机网络实验指示书.doc
  14. 支付宝当面付扫码支付支付后不回调_【支付宝支付】支付宝手机网站支付流程...
  15. 如何去管理Java项目
  16. 等保 2.0 二级 VS 三级
  17. java转换中文日期格式_java 转换日期格式的方法
  18. 显著性检验 p-value
  19. python文本发音_python3 - 文本读音器
  20. 千团大战再现社区团购 下一个“拼多多”会在这里诞生吗?

热门文章

  1. 一个关于 TensorFlow 的悲剧故事
  2. 春运能不能抢到票就看他了!开源的Python抢票神器
  3. 打通语言理论和统计 NLP 两个世界,Transformers/GNNs 架构能做到吗?
  4. PostgreSQL 13 发布,索引和查找有重大改进
  5. 热点 | Excel不“香”了,数据分析首选Python!
  6. 原来 Kylin 的增量构建,大有学问! | 原力计划
  7. JavaScript 将死?
  8. 未来的程序员都将在浏览器中编码!
  9. Milvus加入LF AI孵化,立志成为最流行的AI数据平台
  10. 如何快速学习一门新的编程语言?