目录

函数递归:就是函数自己调用自己

下面我们通过几个例子了解一下函数递归

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语言 | 函数递归题相关推荐

  1. 什么叫c语言函数递归,什么是递归-C语言函数递归-嗨客网

    C语言函数递归教程 函数递归就是一个 C语言函数递归条件 执行一个函数时,就创建一个新的受保护的独立空间(新函数栈). 函数的局部 递归必须向退出递归的条件逼近,否则就是无限递归了. 当一个函数执行完 ...

  2. C语言函数递归调用实验报告,C语言函数的递归和调用实例分析

    一.基本内容: C语言中的函数可以递归调用,即:可以直接(简单递归)或间接(间接递归)地自己调自己. 要点: 1.C语言函数可以递归调用. 2.可以通过直接或间接两种方式调用.目前只讨论直接递归调用. ...

  3. c语言字符串递归例子,c语言函数递归(简单的递归例子c语言)

    若在main函数中调用hanoi(3,'A','B','c')运行结果 void move(char getone,char . 分成三组: (一), 目的:将1号和2号从A移到B 调用函数:hano ...

  4. C语言函数递归—经典递归问题

    目录 一.什么是递归? 二. 汉诺塔问题 2.1 认识什么是汉诺塔 2.2 汉诺塔打印步数 2.3 汉诺塔打印步骤 三.青蛙跳台阶问题 一.什么是递归? 这里我们先简单的认识一下什么是函数递归:我们可 ...

  5. c语言函数递归相关知识及应用

    文章目录 一.函数递归理论知识 1.函数递归概念 2.函数递归的几点注意 二.函数递归的应用 1.使用递归完成n的阶乘 2.用递归方式实现打印一个整数的每一位 3.写一个递归函数输入一个非负整数,返回 ...

  6. 对于C语言函数递归的简单理解(新手入门必看!!!)

    什么是函数递归? 程序调用自身的编程技巧称为递归(recursion). 递归做为一种算法在程序设计语言中广泛应用. 一个过程或函数在其定义或说明中有直接或间接 调用自身的 一种方法,它通常把一个大型 ...

  7. 【C语言函数递归】编程将字符串s倒序输出,要求利用函数递归实现。

    编程将字符串s倒序输出,要求利用函数递归实现. **输入格式要求:"%s" 提示信息:"input your string:\n" **输出格式要求:" ...

  8. C语言 函数递归例题解析

    1.接受一个整形值(无符号),把它转换为 字符并打印它 模拟实现strlen()函数. 3.求n的阶乘 4.斐波那契数列 总结 1.接受一个整形值(无符号),把它转换为 字符并打印它 void fun ...

  9. C语言——函数递归实现

    目录 题1: 题目描述 代码编写(C语言版本) 结果演示 题2: 题目描述 代码编写(C语言版本) 结果演示 题3: 题目描述 代码编写(C语言版本) 结果演示 题4: 题目描述 代码编写(C语言版本 ...

最新文章

  1. 分布式版本控制系统 Git 教程
  2. ueditor php 附件,ueditor单独调用上传附件和图片的功能
  3. Pandas中map,applymap和apply方法之间的区别
  4. LeetCode(16)题解--3Sum Closest
  5. nginx fastcgi python_webpy + nginx + fastcgi 构建python应用
  6. 电竞比分源码/免买分源码/可二开/支持最新PHP7.3/LOL,王者,吃鸡等等电竞比分源码
  7. 【图像处理】透视变换 Perspective Transformation(小细节修正和推导流程补充)
  8. JavaWeb: Redis存储Session方案
  9. 智能卡开发的相关总结
  10. Android 获取图片研究
  11. NGUI UIcenterOnChild
  12. 幼儿园观察记录的目的和目标_幼儿园教育活动内容实施中的观察与记录有何目的...
  13. vscode下载C/C++手动下载 VSIX安装
  14. matlab怎么求过渡矩阵,求过渡矩阵的方法
  15. 刚刚,5000000 里程碑达成!
  16. YBC携手IZO打造创业家的摇篮
  17. android killer java_Android反编译工具的使用-Android Killer
  18. 机器学习实战(Machine Learning in Action)学习笔记————08.使用FPgrowth算法来高效发现频繁项集...
  19. c语言之良好的编程习惯(一)
  20. 控件之Scale LabelScale

热门文章

  1. 2022年3000元电脑最强组装 组装电脑配置推荐3000元左右
  2. 华为ESNP,路由器和交换机连接电脑不同网段的解决方法。
  3. win10 启动自动修复失败
  4. NVMe-MI 时代的NVMe SSD监控和管理
  5. Thinkpad Intel 5100无线网卡间歇性掉线问题解决方案
  6. 操作Excel工具类:ExcelUtils.java
  7. 自己封装的poi操作Excel工具类
  8. macOS 系统打开软件时,会出现提示‘ “***.app”已损坏,无法打开。您应该推出磁盘映像。-解决方法
  9. 前端第二章:3.HTML文档声明、存储容量换算、字符编码、字符集、HTML帮助文档Zeal
  10. 常用工具(一)——安卓手机app抓包burpsuite