C语言基础(14)-递归
一. 递归的定义
函数可以调用自己,这就叫函数的递归。
先序递归和后序递归
#include <stdio.h> void test(int n);
void test1(int n); void main() { int a = ;
test1(a);
system("pause");
} void test(int n) { if (n > ){ // 递归终止条件,递归一定要有终止条件
printf("n=%d\n",n); // 先序递归 输出结果:10 9 8 7 6 5 4 3 2 1
test1(n-);
}
} void test1(int n) { if (n > ) {
test1(n-);
printf("n=%d\n",n); // 后序递归 输出结果:1 2 3 4 5 6 7 8 9 10
} }
例1:求第n个人的岁数
有n个人排成一队,问第n个人多少岁,他回答比前面一个人大2岁,再问前面一个人多少岁,他回答比前面一个人大2岁,一直问到最后问第一个人,他回答10岁
#include <stdio.h>
int getAge(int n);
void main() {
int a = ;
printf("第%d个人的岁数是:%d\n",a,getAge(a));
system("pause");
}
int getAge(int n) {
int age;
if (n == ) {
age = ;
}
else{
age = getAge(n - ) + ;
}
return age;
}
例2:将十进制数转化为二进制数
#include <stdio.h>
int getBinary(int n);
void main() {
int a = ;
getBinary(a);
system("pause");
}
//将十进制数转换为二进制数
int getBinary(int n) {
int i = n % ;
if (n >= ) {
getBinary(n / );
}
printf("%d",i);
}

例3:斐波那契数列
#include <stdio.h>
int fib(int n);
void main() {
for (int i = ; i < ; i++) {
printf("第%d项的值为%d\n", i, fib(i));
}
system("pause");
}
// 斐波那契数列
int fib(int n) {
if (n == )
return ;
if (n == )
return ;
if (n > )
return fib(n - ) + fib(n - );
}

例4:计算一个字符串的长度
#include <stdio.h>
int mystrlen(const char *p, int n);
void main() {
char *a = "hello123";
printf("当前字符串的长度为:%d\n",mystrlen(a,));
system("pause");
}
int mystrlen(const char *p, int n) {
if (p[n]) { // 这里判断是否到达字符串末尾的0
return mystrlen(p,n+);
}else {
return n;
}
}

例5:求n个自然数的和
// 求n个自然数的和
int mysum(int n) {
if (n == ) { // 递归终止条件
return ;
}
return mysum(n - ) + n;
}
C语言基础(14)-递归的更多相关文章
- 十四. Python基础(14)--递归
十四. Python基础(14)--递归 1 ● 递归(recursion) 概念: recursive functions-functions that call themselves either ...
- C语言基础--循环 递归打印乘法表
for循环打印乘法表: #include <stdio.h> // for循环打印乘法表 int main(int argc, const char * argv[]) { //矩形 ; ...
- Java入门 - 语言基础 - 14.String类
原文地址:http://www.work100.net/training/java-string.html 更多教程:光束云 - 免费课程 String类 序号 文内章节 视频 1 概述 2 创建字符 ...
- go语言基础之递归实现数字累加
1.实现1+100 = 5050 示例: package main import "fmt" //实现1+2+3+……100 func test01() (sum int) { f ...
- C++语言基础(14)-typeid
typeid可用来判断类型是否相等: 例如有下面的定义: char *str; ; ; float f; 类型比较 结果 类型比较 结果 typeid(int) == typeid(int) true ...
- Java语言基础(14)
1 访问控制修饰符(二) 1)public:公共的,可以用来修饰类,属性,构造方法以及方法,被public修饰的类,属性,构造方法以及方法,可以任意的进行访问. 2)private:私有的,可以用来修 ...
- GO学习-(14) Go语言基础之接口
Go语言基础之接口 接口(interface)定义了一个对象的行为规范,只定义规范不实现,由具体的对象来实现规范的细节. 接口 接口类型 在Go语言中接口(interface)是一种类型,一种抽象的类 ...
- D10——C语言基础学PYTHON
C语言基础学习PYTHON——基础学习D10 20180906内容纲要: 1.协程 (1)yield (2)greenlet (3)gevent (4)gevent实现单线程下socket多并发 2. ...
- D05——C语言基础学PYTHON
C语言基础学习PYTHON——基础学习D05 20180815内容纲要: 1 模块 2 包 3 import的本质 4 内置模块详解 (1)time&datetime (2)datetime ...
随机推荐
- BUG:Yii登录时 101 net::ERR_CONNECTION_RESET
Bug描述:YII web入口登录,无法登录一直等待,最终重定向 原因:设置的默认路由DefauRoute中的控制器中有错误,导致无法跳转找指定的路由规则 解决方案:这就多亏了SourceTree了, ...
- 7zip File: How to Uncompress 7z files on Ubuntu, Debian, Fedora
转:http://www.thegeekstuff.com/2010/04/7z-7zip-7za-file-compression/ Question: How do I uncompress a ...
- SQLSERVER调用DLL程序
在SQL Server中调用dll分为两个步骤 1.创建一个dll文件(dll文件分成3种类型,讲其中一种) 2.把dll文件放进SQL Server的程序集中.然后定义一个Function,就可以通 ...
- Xamarin.Forms 调用 腾讯地图SDK
Xamarin.Forms研究了好一段时间了,最近一直在学习中,想尝试一下调用其他的SDK,就如腾讯地图SDK(申请容易). 完成此次项目得感谢以下链接: http://www.cnblogs.com ...
- Python扫描指定文件夹下(包含子文件夹)的文件
扫描指定文件夹下的文件.或者匹配指定后缀和前缀的函数. 假设要扫描指定文件夹下的文件,包含子文件夹,调用scan_files("/export/home/test/") 假设要扫描 ...
- 异常值监测的方法 Tukey test
参考: https://www.zhihu.com/question/38066650
- 使用spice连接kvm guest主机
spice技术已经出来很久了,其是优于VNC的一种远程桌面协议,之所以这里记录下,是由于某些加密视频文件(如以vpy结尾的超时代视频加密),会识别主机的特征吗,一旦主机重启后这些视频又没法查看了,所以 ...
- Yii2系列教程六:集成编辑器
上一篇文章我们实现了简单的用户权限管理,至于更先进的RBAC,我后面会单独出一篇文章来说说.在这一篇文章当中,我主要想写的是在Yii2中集成一个编辑器,因为在我们的实际开发当中,一个简单的textar ...
- asp.net购物车,订单以及模拟支付宝支付(二)---订单表
购物车准备完毕之后,就要着手订单表的设计了 表结构如下: T_Orders T_OrderBooks 为什么这里要分为两个表? 仔细想想,现实生活中的发票 特地去网上找了一张,不是很清晰 但是,正常人 ...
- hibernate学习系列-----(6)hibernate对集合属性的操作之Set集合篇
先说一段废话吧,本打算每天把所学的知识总结为博客的,但是昨天为什么没有写呢?没有学习吗?No,那是为什么?贪玩,对,这位同学说对了,老实说昨天感觉身体不怎么舒服,大家都知道,这其实就是为自己懒找借口, ...