• C语言——递归题


    对于递归问题,我们一定要想清楚递归的结束条件,每个递归的结束条件,就是思考这个问题的起始点

    题目1:
    在这里插入图片描述

    思路:当k=1时,任何数的1次方都是原数,此时返回n,这就是递归的结束条件,当k>1时,就使用递归进行拆解:
    ![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/b1585c9d96f54b47971798e55d4361d4.png

    代码实现如下:

    #include 
    
    int Func(int n,int k)
    {
    	if (k == 1)
    		return n;
    	else
    		return n * Func(n, k - 1);
    }
    
    int main()
    {
    	int n = 0;
    	int k = 0;
    	scanf("%d %d", &n, &k);
    	int ret = Func(n, k);
    	printf("%d\n", ret);
    
    	return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20

    代码的执行过程如下:

    在这里插入图片描述

    题目2:
    在这里插入图片描述

    思路:当输入值n<10时,返回n,这就是递归的结束条件,当n>10时:
    在这里插入图片描述

    代码实现如下:

    #include 
    
    int Func(int n)
    {
    	if (n < 10)
    		return n;
    	else
    		return n % 10 + Func(n / 10);
    }
    
    int main()
    {
    	int n = 0;
    	
    	scanf("%d", &n);
    	int ret = Func(n);
    	printf("%d\n", ret);
    
    	return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20

    题目3:
    在这里插入图片描述

    思路:使用递归时,我们需要知道它的结束条件,当输入值n=1时,返回1,这就是结束条件,当n>1时:
    在这里插入图片描述
    使用非递归时,就是迭代(循环)。

    代码实现如下:

    #include 
    
    //使用递归
    int Func(int n)
    {
    	if (n == 1)
    		return n;
    	else
    		return n * Func(n - 1);
    }
    
    int main()
    {
    	int n = 0;
    
    	scanf("%d", &n);
    	int ret = Func(n);
    	printf("%d\n", ret);
    
    	return 0;
    }
    
    //使用迭代
    //int main()
    //{
    //	int n = 0;
    //	scanf("%d", &n);
    //	int ret = 1;
    //
    //	for (int i = 1; i <= n; i++)
    //	{
    //		ret *= i;
    //	}
    //	printf("%d\n", ret);
    //
    //	return 0;
    //}
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37

    题目4:
    在这里插入图片描述

    思路:同样的,我们首先要判断递归的结束条件,当输入值n<10时,直接打印n,这就是递归的结束条件。当n>10时:
    在这里插入图片描述

    代码实现如下:

    #include 
    
    void Print(int n)
    {
    	if (n < 10)
    		printf("%d ", n);
    	else
    	{
    		Print(n / 10);
    		printf("%d ", n % 10);
    	}
    
    }
    int main()
    {
    	int n = 0;
    	scanf("%d", &n);
    	Print(n);
    
    	return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
  • 相关阅读:
    Java 8中的map和flatMap方法的区别
    Sharding-JDBC
    Python--配置文件优化
    java建材公司管理系统计算机毕业设计MyBatis+系统+LW文档+源码+调试部署
    vulnhub之school 1
    有了Spring为什么还需要SpringBoot呢
    【RocketMQ】RocketMQ5.0新特性(一)- Proxy
    数据结构学习笔记——顺序存储结构实现串
    盘点 三款高可用的机器学习模型 web页面化的工具(一)
    【Flink实战】玩转Flink里面核心的Source Operator实战
  • 原文地址:https://blog.csdn.net/2301_77900444/article/details/136585556