函数递归【1】

一、函数递归的概念
1.概念
  递归即函数调用自身的编程技巧,即自己调用自己。递归,有递有归,递即递推,归即回归。先递后归。

  少量多次的重复计算使用递归可以大大减少代码量。

 关键目的:把大事化小。

2.必要条件
  存在限制条件,当满足限制条件时,递归不再继续;

  每次递归调用后都越来越接近这个限制条件。

注:若没有限制条件,则会一直调用,导致栈溢出

例如:

#include <stdio.h>
 
int main()
{
    printf("haha\n");
    main();
 
    return 0;
}
二、函数递归的应用举例及解释
1.计算n的阶乘
#include <stdio.h>
int factorial(int n)
{
    if (n == 1)
    {
        return 1;//1的阶乘等于1
    }
    return n * factorial(n - 1);//每个大于1的数的阶乘都等于该数与上一个数的阶乘相乘
}
 
int main()
{
    int num = 0;
    scanf("%d", &num);
 
    int x = factorial(num);
    printf("%d\n", x);
 
    return 0;
}
假设num=5,则 5!=5*4!=5*4*3!=5*4*3*2!=5*4*3*2*1 =120

即5!=5*factorial(4) =5*4*factorial(3) =5*4*3*factorial(2) =5*4*3*2*factorial(1) =5*4*3*2*1 =120

此题中的“递” 体现在层层调用,直至n=1时返回1,然后再层层回归,每个函数的返回值依次回归,得到5!=120。

2.依次打印输入数的各位数
#include <stdio.h>
 
void print(int n)
{
    if (n > 9)
    {
        print(n / 10);
    }
 
    printf("%d ", n % 10);//打印结果为顺序
    //若printf语句在if前面,则打印出来的结果为逆序
}
 
int main()
{
    int num = 0;
    scanf("%d", &num);
 
    print(num);
    return 0;
}
 当n>9(即输入的数不是个位数)时,调用print函数本身,参数为原始形参/10,越来越靠进个位数,直至参数<=9时,打印该参数%10;打印之后原路返回(回归),依次打印上一个print函数中的n%10,直至最开始的print函数,结束。

假设输入的数为1234,则依次调用print(1234),print(123),print(12),print(1),当形参为1时,不再继续调用该函数,而是执行print(1)中的printf语句打印1,而后回归至函数print(12)中的if语句(已经执行完毕),然后执行printf语句打印2,。。。依次类推,直到执行print(1234)printf语句打印4,函数调用结束,屏幕上依次打印出了1 2 3 4,达到题目要求。
————————————————

                            版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
                        
原文链接:https://blog.csdn.net/weixin_60371270/article/details/125960695

  • 11
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值