【17】C语言 | 函数递归题
目录
函数递归:就是函数自己调用自己
下面我们通过几个例子了解一下函数递归
1 【下面代码输出什么?】
2【数9的个数】
3 【分数求和】
4 【求10个整数中最大值】
5 【屏幕上输出乘法口诀表】
6 【输出乘法口诀表】
7 【字符串逆序(递归实现)】
8 【计算一个数的每位之和(递归实现)题目内容】
9 【编写一个函数实现n的k次方,使用递归实现】
函数递归:就是函数自己调用自己
递归的两个必要条件:
- 1.存在限制条件,当满足这个限制条件的时候,递归便不再继续
- 2.每次递归调用之后越来越接近这个限制条件。
下面我们通过几个例子了解一下函数递归
1 【下面代码输出什么?】
int main()
{int a = 0,b =0;for(a = 1,b = 1;a <= 100;a++){if(b >=20)break;if(b % 3 == 1){b = b + 3;continue;}b = b - 5;}printf("%d\n",a);return 0;
}
输出为:8
2【数9的个数】
题目内容:
编写程序数一下 1到 100 的所有整数中出现多少个数字9
int main()
{int i = 0;int count = 0;for(i = 1;i <=100;i++){if(i%10 == 9)count++;if(i/10 == 9)count++;}printf("%d\n",count);return 0;
}
3 【分数求和】
题目内容:
计算1/1-1/2+1/3-1/4+1/5 ...... + 1/99 - 1/100 的值,打印出结果
//计算1/1-1/2+1/3-1/4+1/5 ...... + 1/99 - 1/100 的值,打印出结果int main()
{int i = 0;double sum = 0.0;for(i = 1;i <=100;i++){if(i%2 == 1)sum+=1.0/i;if(i%2 == 0)sum-=1.0/i;}printf("%lf",sum);return 0;
}
方法二:
int main()
{int i = 0;double sum = 0.0;int flag = 1;for(i = 1;i <=100;i++){sum+=flag*1.0/i;flag = -flag;}printf("%lf",sum);return 0;
}
4 【求10个整数中最大值】
int main()
{int i = 0;int arr[] = {1,2,3,4,5,6,7,8,9,10};int max = 1;for(i = 1;i <=10;i++){if(max < arr[i]){max = arr[i];}}printf("%d\n",max);return 0;
}
以上有个问题:当有负数时就比较不出来了,应该改成下
int main()
{int i = 0;int arr[] = {-1,-2,-3,-4,-5,-6,-7,-8,-9,-10};int max = arr[0];for(i = 1;i <=10;i++){if(max < arr[i]){max = arr[i];}}printf("%d\n",max);return 0;
}
5 【屏幕上输出乘法口诀表】
int main()
{int i = 0;for(i = 1;i <=9;i++){int j = 0;for(j = 1;j <=i;j++){printf("%d*%d=%-2d ",i,j,i*j);}printf("\n");}return 0;
}
6 【输出乘法口诀表】
题目内容:
实现一个函数,打印乘法口诀表,口诀表的行数和列数自己指定如:输入9,输出9”9口诀表,输出12,输出12”12的剩法口诀表
void print_table(int n)
{int i = 0;for(i = 1;i <= n;i++){int j = 0;for(j = 1;j <=i; j++){printf("%d*%d=%d ",i,j,i*j);}printf("\n");}
}
int main()
{int n = 0;scanf("%d",&n);print_table(n);return 0;
}
7 【字符串逆序(递归实现)】
题目内容:
编写一个函数reverse_string(char*string)(递归实现)实现:将参数字符串中的字符反向排列,不是逆序打印
要求:
不能使用C函数库中的字符串操作函数比如:char arr[] = “ abodef ”
逆序之后数组的内容变成: fedcba
#include<string.h>int my_strlen(char* str)
{int count = 0;while(*str != '\0'){count++;str++;}return count;
}
void reverse_string(char* str)
{int left = 0;int right = my_strlen(str) - 1;char tmp = 0;while(left<right){tmp = str[right];str[right] = str[left];str[left] = tmp;left++;right--;}
}
int main()
{char arr[] = "abcdef";reverse_string(arr);printf("%s\n",arr);return 0;
}
用递归的方法:
#include<string.h>int my_strlen(char* str)
{int count = 0;while(*str != '\0'){count++;str++;}return count;
}
void reverse_string(char* str)
{char tmp = *str;int len =my_strlen(str);*str = * (str + len -1);*(str + len -1) = '\0';
}
int main()
{char arr[] = "abcdef";reverse_string(arr);printf("%s\n",arr);return 0;
}
8 【计算一个数的每位之和(递归实现)题目内容】
写一个递归函数Digitsum(n),输入一个非负整数返回组成它的数字之和。
例如:调用DigitSum(1729),则应该返回1+7+2+9,它的和是19输入: 1729,输出: 19
int Digitsum(int num)
{if(num>9){return num%10 + Digitsum(num/10);}else{return num;}
}
int main()
{int num = 1729;int sum = Digitsum(num);printf("%d\n",sum);return 0;
}
9 【编写一个函数实现n的k次方,使用递归实现】
double sque(int n,int k)
{if(k == 0){return 1.0;}else if(k>0){return n*sque(n, (k-1));}else{return 1.0 / (sque(n,-k));}
}
int main()
{int n = 0;int k = 0;scanf("%d%d",&n,&k);printf("%lf\n",sque(n,k));return 0;
}
【17】C语言 | 函数递归题相关推荐
- 什么叫c语言函数递归,什么是递归-C语言函数递归-嗨客网
C语言函数递归教程 函数递归就是一个 C语言函数递归条件 执行一个函数时,就创建一个新的受保护的独立空间(新函数栈). 函数的局部 递归必须向退出递归的条件逼近,否则就是无限递归了. 当一个函数执行完 ...
- C语言函数递归调用实验报告,C语言函数的递归和调用实例分析
一.基本内容: C语言中的函数可以递归调用,即:可以直接(简单递归)或间接(间接递归)地自己调自己. 要点: 1.C语言函数可以递归调用. 2.可以通过直接或间接两种方式调用.目前只讨论直接递归调用. ...
- c语言字符串递归例子,c语言函数递归(简单的递归例子c语言)
若在main函数中调用hanoi(3,'A','B','c')运行结果 void move(char getone,char . 分成三组: (一), 目的:将1号和2号从A移到B 调用函数:hano ...
- C语言函数递归—经典递归问题
目录 一.什么是递归? 二. 汉诺塔问题 2.1 认识什么是汉诺塔 2.2 汉诺塔打印步数 2.3 汉诺塔打印步骤 三.青蛙跳台阶问题 一.什么是递归? 这里我们先简单的认识一下什么是函数递归:我们可 ...
- c语言函数递归相关知识及应用
文章目录 一.函数递归理论知识 1.函数递归概念 2.函数递归的几点注意 二.函数递归的应用 1.使用递归完成n的阶乘 2.用递归方式实现打印一个整数的每一位 3.写一个递归函数输入一个非负整数,返回 ...
- 对于C语言函数递归的简单理解(新手入门必看!!!)
什么是函数递归? 程序调用自身的编程技巧称为递归(recursion). 递归做为一种算法在程序设计语言中广泛应用. 一个过程或函数在其定义或说明中有直接或间接 调用自身的 一种方法,它通常把一个大型 ...
- 【C语言函数递归】编程将字符串s倒序输出,要求利用函数递归实现。
编程将字符串s倒序输出,要求利用函数递归实现. **输入格式要求:"%s" 提示信息:"input your string:\n" **输出格式要求:" ...
- C语言 函数递归例题解析
1.接受一个整形值(无符号),把它转换为 字符并打印它 模拟实现strlen()函数. 3.求n的阶乘 4.斐波那契数列 总结 1.接受一个整形值(无符号),把它转换为 字符并打印它 void fun ...
- C语言——函数递归实现
目录 题1: 题目描述 代码编写(C语言版本) 结果演示 题2: 题目描述 代码编写(C语言版本) 结果演示 题3: 题目描述 代码编写(C语言版本) 结果演示 题4: 题目描述 代码编写(C语言版本 ...
最新文章
- 分布式版本控制系统 Git 教程
- ueditor php 附件,ueditor单独调用上传附件和图片的功能
- Pandas中map,applymap和apply方法之间的区别
- LeetCode(16)题解--3Sum Closest
- nginx fastcgi python_webpy + nginx + fastcgi 构建python应用
- 电竞比分源码/免买分源码/可二开/支持最新PHP7.3/LOL,王者,吃鸡等等电竞比分源码
- 【图像处理】透视变换 Perspective Transformation(小细节修正和推导流程补充)
- JavaWeb: Redis存储Session方案
- 智能卡开发的相关总结
- Android 获取图片研究
- NGUI UIcenterOnChild
- 幼儿园观察记录的目的和目标_幼儿园教育活动内容实施中的观察与记录有何目的...
- vscode下载C/C++手动下载 VSIX安装
- matlab怎么求过渡矩阵,求过渡矩阵的方法
- 刚刚,5000000 里程碑达成!
- YBC携手IZO打造创业家的摇篮
- android killer java_Android反编译工具的使用-Android Killer
- 机器学习实战(Machine Learning in Action)学习笔记————08.使用FPgrowth算法来高效发现频繁项集...
- c语言之良好的编程习惯(一)
- 控件之Scale LabelScale
热门文章
- 2022年3000元电脑最强组装 组装电脑配置推荐3000元左右
- 华为ESNP,路由器和交换机连接电脑不同网段的解决方法。
- win10 启动自动修复失败
- NVMe-MI 时代的NVMe SSD监控和管理
- Thinkpad Intel 5100无线网卡间歇性掉线问题解决方案
- 操作Excel工具类:ExcelUtils.java
- 自己封装的poi操作Excel工具类
- macOS 系统打开软件时,会出现提示‘ “***.app”已损坏,无法打开。您应该推出磁盘映像。-解决方法
- 前端第二章:3.HTML文档声明、存储容量换算、字符编码、字符集、HTML帮助文档Zeal
- 常用工具(一)——安卓手机app抓包burpsuite