码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • C语言练习题(递归)


    目录

    1.接受一个整型值(无符号),按照顺序打印它的每一位。

    2.编写函数不允许创建临时变量,求字符串的长度。

    3.求n的阶乘。(不考虑溢出)

    4.求第n个斐波那契数。(不考虑溢出)

    5.编写一个函数 reverse_string(char * str)(递归实现)

    6.写一个递归函数DigitSum(n),输入一个非负整数,返回组成它的数字之和

    7.编写一个函数实现n的k次方,使用递归实现。


    1.接受一个整型值(无符号),按照顺序打印它的每一位。

    例如:
    输入:1234,输出 1 2 3 4

    思路:我们应该想的是print函数可以把每一位给打出来。这样就会有下面这一系列的思考。
    print(1234)
    print(123)4
    print(12)3 4
    print(1)2 3 4

    1. #include <stdio.h>
    2. void print(int n)
    3. {
    4. if (n > 9)
    5. {
    6. print(n/10);
    7. }
    8. printf("%d ", n % 10);
    9. }
    10. int main()
    11. {
    12. unsigned int num = 0;
    13. scanf("%d", &num);//1234
    14. print(num);
    15. return 0;
    16. }

    2.编写函数不允许创建临时变量,求字符串的长度。

    我们的函数每次是要求字符串长度的,传进去的参数只是字符数组的首地址而已,那我们就将首个字符的长度算出来,然后逐一去递归。 

    my_strlen("abcd")
    1 + my_strlen("bcd")
    1+1+my_strlen("cd")
    1+1+1+my_strlen("d")
    1+1+1+1+my_strlen("")

    1. int my_strlen(char* str)
    2. {
    3. if (*str != '\0')
    4. {
    5. return 1 + my_strlen(str+1);
    6. }
    7. else
    8. return 0;
    9. }
    10. int main()
    11. {
    12. char arr[] = "abcd";
    13. int len = my_strlen(arr);
    14. //len = strlen(arr);
    15. printf("%d\n", len);
    16. return 0;
    17. }

    3.求n的阶乘。(不考虑溢出)

    思路:n的阶乘 = n*(n-1)*(n-2)........*1;而我们定义的fac函数就是求阶乘的,所以只要每次将n的值传进去即可。

    1. int fac(int n)
    2. {
    3. if (n <= 1)
    4. return 1;
    5. else
    6. return n * fac(n - 1);
    7. }
    8. int main()
    9. {
    10. int n = 0;
    11. scanf("%d", &n);
    12. int ret = fac(n);
    13. printf("%d ",ret);
    14. return 0;
    15. }

    4.求第n个斐波那契数。(不考虑溢出)

    思路:斐波那契数列:1 1 2 3 5 8 13 21 34 55......而我们可以根据这个特性,写出数学表达式。然后写出代码即可。

    1. int fib(int n)
    2. {
    3. if (n <= 2)
    4. return 1;
    5. else
    6. return fib(n - 1) + fib(n - 2);
    7. }
    8. int main()
    9. {
    10. int n = 0;
    11. scanf("%d", &n);
    12. int ret = fib(n);
    13. printf("%d ", ret);
    14. return 0;
    15. }

    5.编写一个函数 reverse_string(char * str)(递归实现)

    实现:将参数字符串中的字符反向排列,不是逆序打印。

    要求:不能使用C函数库中的字符串操作函数。

    比如 : "abcdef"  变成 "fedcba"

    思路:每次调用 reverse_string函数的时候,先将字符串首尾两个字符交换,但要注意末尾的字符需要填充字符‘\0’,因为要得出新字符串的末尾位置。

    1. #include <stdio.h>
    2. #include <string.h>
    3. void reverse_string(char* str)
    4. {
    5. int len = strlen(str);
    6. char tmp = *str;
    7. *str = *(str + len - 1);
    8. *(str + len - 1) = '\0';
    9. if (strlen(str + 1) >= 2)
    10. reverse_string(str + 1);
    11. *(str + len - 1) = tmp;
    12. }
    13. int main()
    14. {
    15. char arr[] = "abcdef";
    16. reverse_string(arr);
    17. printf("%s\n", arr);
    18. return 0;
    19. }

    6.写一个递归函数DigitSum(n),输入一个非负整数,返回组成它的数字之和

    例如,调用DigitSum(1729),则应该返回1+7+2+9,它的和是19

    输入:1729,输出:19

    思路:和第一题的思路大致相同。

    1. #include <stdio.h>
    2. int DigitSum(int n)
    3. {
    4. if (n > 9)
    5. return (n % 10) + DigitSum(n / 10);
    6. else
    7. return n;
    8. }
    9. int main()
    10. {
    11. int num = 0;
    12. scanf("%d", &num);
    13. int ret = DigitSum(num);
    14. printf("%d\n", ret);
    15. return 0;
    16. }

    7.编写一个函数实现n的k次方,使用递归实现。

    思路:注意k的取值即可。 

    1. double power(int n, int k)
    2. {
    3. if (k > 0)
    4. return n * power(n,k - 1);
    5. else if(k == 0)
    6. return 1;
    7. else
    8. return 1.0 / power(n, -k);
    9. }
    10. int main()
    11. {
    12. int n = 0;
    13. int k = 0;
    14. scanf("%d %d", &n,&k);
    15. double ret = power(n, k);
    16. printf("%.1f\n", ret);
    17. return 0;
    18. }

  • 相关阅读:
    脉冲神经网络原理及应用,脉冲神经网络项目名称
    【ceph】ceph集群删除pool报错: “EPERM: pool deletion is disabled“
    SimSiam-Exploring Simple Siamese Pepresentation Learning
    第三十五章 Objects - 集合类
    Moonbeam生态说|Bitquery:Web3区块链数据提供商
    搭建私人图床结合内网穿透实现公网访问,让您的摄影作品连接世界
    【每日一题Day340】LC2251花期内花的数目 | 差分+哈希表+排序 排序+二分查找
    线性空间、子空间、基、基坐标、过渡矩阵
    Java集合框架
    大数据毕业设计选题推荐-家具公司运营数据分析平台-Hadoop-Spark-Hive
  • 原文地址:https://blog.csdn.net/m0_63562631/article/details/125558351
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号