目录

  • 形式参数与实际参数
  • 编程求解 1+2+3+...+n
  • 二进制转换
  • 用递归求两个数的最大公约数

形式参数与实际参数

以求公约数为例,估计有很多同学在看到这个程序时对于return f(b,a%b)不是很好理解。这里是形式参数与实际参数的做鬼。

#include <iostream>
using namespace std;
int f(int a, int b) {if (b != 0) {return f(b, a % b);//} else {return a;//最终的终点}
}int main() {int a, b;cin >> a >> b;cout << f(a, b);
}

形式参数就是一个函数的自变量,没有实际的取值,往往有一个范围。比如高中所学的lnx,这里的x就是形式参数,要求x>0。而ln2,2是一个有实际意义的数,所以2是一个实际参数,就是传入这个函数的数。再比如二进制转换中的f(int n,string r),这里的意思是第一个位置要给我传入一个整型变量,而第二个位置要给我一个字符串。这才是形式参数的意义。
f(b,a%b)表示把b赋给a,a%b赋给b,一直循环往复下去。首先会判断b是否为0,也就是a%b是否为0。直到a%b==0的时候,就可以返回a的值了(其实是传入b的值)。

编程求解 1+2+3+…+n

#include <iostream>
using namespace std;
int n;
int func(int i, int s) {if (i <= n) {return func(i + 1, s + i);//要用return 不然无返回值
//在C++中对于参数s加i相当于s+=i} else {return s;}
}int main() {cin >> n;cout << func(1, 0);
}
#include<iostream>
using namespace std;
int n;
int s;
void func(int i) {if (i <= n) {s += i;func(i + 1);}
}int main() {cin >> n;func(1);cout << s;
}
#include <iostream>
using namespace std;
int func(int x) {if (x == 1) {return 1;} else {return func(x - 1) + x;}
}int main() {int x;cin >> x;cout << func(x);
}

二进制转换

string s;//一定要声明公共变量s
#include <iostream>
using namespace std;
string f(int n) {char c;if (n != 0) {c = n % 2 + '0'; //转为字符的整数要加上0的ASCII码s = c + s; //这里的加法很有讲究因为是倒序所以是c+sreturn f(n / 2); //直接用递归} else {return s;}
}int main() {int n;cin >> n;cout << f(n);
}

注意:
1、C++中每开一个函数,都是一个独立的内存,所以彼此之间看不到对方的家底(里面所声明的变量),如果在f函数里面声明string s的话那么每次递归产生的s都是新的空字符串,从而达不到目的。
2、整数转字符整数要给其加上对应0的ASCII码。再赋值给字符变量c,就会自动转成我们想要的值。

string s;
void f(int n) {char c;if (n != 0) {c = n % 2 + '0';s = c + s;f(n / 2);}
}int main() {int n;cin >> n;f(n);cout << s;
}

也可以不要返回值直接打出s,会不会更简单点呢?关键在于全局变量的声明。

string f(int n, string r) {char c;if (n != 0) {c = n % 2 + '0';return f(n / 2, c + r);} else {return r;}
}int main() {int n;cin >> n;cout << f(n, "");
}

也可以不声明全局变量,在函数内部层层累加运算返回。

用递归求两个数的最大公约数

#include <iostream>
using namespace std;
int f(int a, int b) {if (b != 0) {return f(b, a % b);//} else {return a;//最终的终点}
}int main() {int a, b;cin >> a >> b;cout << f(a, b);
}

递归实例以及应用包含形参辨析相关推荐

  1. 递归算法(python),汉诺塔问题,斐波那契数列,一个简单的递归实例,用递归实现阶乘,用递归查看目录及文件

    https://blog.csdn.net/hanhanwanghaha宝藏女孩 欢迎您的关注! 欢迎关注微信公众号:宝藏女孩的成长日记 让这个可爱的宝藏女孩在努力的道路上与你一起同行! 如有转载,请 ...

  2. 递归(二)-------经典递归实例(汉诺塔问题)

    2019独角兽企业重金招聘Python工程师标准>>> 上一篇文章讨论一个经典的递归实例(Fibonacy数列问题),现在来讨论一下另外一个经典的递归例子:汉诺塔问题: 问题描述:在 ...

  3. 递归:若函数包含了对其自身的调用,该函数为递归的。《Python核心编程》P305...

    递归:若函数包含了对其自身的调用,该函数为递归的. >>> #递归 <Python核心编程>P305 >>> def factorial(n): if ...

  4. mysql父子节点分层_mysql 递归实例 父子节点层级递归

    在Oracle中可以使用CONNECT  BY子句可以轻松的实现递归查询,在MSSQLServer和DB2中则可以使用WITH子句来实现递归查询,MYSQL中即不支持CONNECT  BY子句也不支持 ...

  5. 递归代码 java_java中的递归实例代码收集大全

    德罗斯特效应 德罗斯特效应(Droste effect)是递归的一种视觉形式,是指一张图片的某个部分与整张图片相同,如此产生无限循环. 看完图后,看看实例! public class TestD { ...

  6. 【Python】函数递归实例之字符串反转、汉诺塔问题分析

    递归的定义 函数定义中调用函数自身的方式 两个特性: 链条:计算过程存在递归链条 例如,n!=n*(n-1)!,n!与(n-1)!就构成了递归链条 基例:基础的实例,存在一个或多个不需要再次递归的基例 ...

  7. ES6/04/严格模式,开启严格模式,严格模式与普通模式对比发生了那些变化,高阶函数,闭包函数,递归函数,递归实例(1,阶乘,2,斐波那契数列,3,根据id返回对应数据对象),浅拷贝和深拷贝

    函数 开启严格模式 1,用 " use strict"; 语句为整个脚本(即:script标签)开启严格模式;在<script>标记的第一行写上"use st ...

  8. 正则的实例用法,删除包含某些字符的字符串

    a=re.findall('[a-z]system[a-z]', ': Control_7_ CodeSystem: GroupCodeSystem: IdSystem:'.lower()) re.s ...

  9. 关于学习Python的一点学习总结(30->递归实例)

    68.递归 先来两个例子: 1.阶乘 def Fact(num):result=numfor i in range(1,num):result*=ireturn result>>> ...

最新文章

  1. C++编译期多态与运行期多态
  2. 大数据量传输时配置WCF的注意事项
  3. Android-正方形的容器
  4. 四种数据持久化方式(上) :属性列表与归档解档
  5. 【阿里云课程】1小时快速掌握Tensorflow核心功能,完成完整的项目实践
  6. Hystrix面试 - 用 Hystrix 构建高可用服务架构
  7. 组装计算机主机心得体会,关于组装电脑的一些总结
  8. 5.3.2 先行发生
  9. Python的psutil模块监控内存代码
  10. 【运动学】基于matlab速度+加速度数值计算 【含Matlab源码 974期】
  11. 如何用python入侵_外星人入侵(使用python编写)
  12. 2020年最新人事管理软件排名(建议收藏)!
  13. 复数(Complex Number)
  14. iOS AppStore 转让APP
  15. 搜狗泛站群之搜狗批量提交软件
  16. 普加甘特图,项目管理解决方案。
  17. root后怎么删除授权管理,Root授权管理
  18. Linux进阶 | Docker部署nginx的web服务,VOLUME的使用详解,实现数据持久化!
  19. 数据结构与算法-进阶(八)AOV 网
  20. 登陆weblogic console报错 The server encountered an unexpected condition which prevented it from

热门文章

  1. (2) pandas 文件读写 (csv)
  2. ScrollView嵌套ListView只显示一行
  3. Windows下VC++显示UTF-8编码中文
  4. iOS开发 常见错误
  5. Hash Table in C
  6. Android 博客园客户端 (四) 基本功能完成(博客列表和内容、新闻列表和内容、推荐博主)...
  7. 设置mysql允许外网访问
  8. 指针学习4--合成析构函数做了什么
  9. springboot+shiro+jwt实现token认证登录
  10. 18.9.22 考试总结