递归的理解

讲递归之前,先来讲一个故事:

从前有座山,山里有座庙,庙里有个老和尚在讲故事,讲的是:从前有座山,山里有座庙,庙里有个老和尚在讲故事,讲的是:……

没错这就是递归(高情商:哇~这就是递归啊懂了懂了;低情商:就这就这?这不就是套娃嘛)

……没错,就是套娃。但是我们仔细想一下就知道,这样无限套娃下去,函数的运行就像吃了炫迈一样根本停不下来,所以这时候我们就要规定一个递归结束条件。也就是说要找到参数为啥时,递归结束,直接返回结果。

示例1

7-2 求阶乘问题 (15 分)

输入一个正整数n,输出n!。

输入格式:

输入在一行中给出1个正整数n。

输出格式:

在一行中输出n!的值。

输入样例:

4

结尾无空行

输出样例:

24

 思路:

首先我们应该知道某个数的阶乘公式为N!=1x2x3x……xN;

然后我们开始套娃:N!= N x (N-1)! (N-1)! = (N-1) x (N-1-1)!;...以此类推即函数f(n)=n*f(n-1);

那什么是截止的条件呢?由阶乘的公式可以知道,运行到f(1)的时候就结束了。

完整代码:

#include<stdio.h>
double f(double n){
    if(n==1)return 1;//结束条件:当套娃到f(1) 的时候直接返回值
    return f(n-1)*n;
}
int main(){
    double n;//这里用double是为了给变量n更大的储存空间。
    scanf("%lf",&n);
    printf("%.0lf",f(n));
    return 0;
}

示例2

7-3 递归实现逆序输出整数 (15 分)

本题目要求读入1个正整数n,然后编写递归函数reverse(int n)实现将该正整数逆序输出。

输入格式:

输入在一行中给出1个正整数n。

输出格式:

对每一组输入,在一行中输出n的逆序数。

输入样例:

12345

结尾无空行

输出样例:

54321

思路:以12345为例,按从低位到高位每次打印一个数,可以想到用求余的运算来获取每一位数 ,即n%10,打印出5;然后如何获得第二个数呢?先执行n/10的操作,可以得到1234,再进行取余得到4……;当只剩下最后一个个位数时结束递归,所以结束条件就是:if(n<10).

完整代码:

#include<stdio.h>
void reserve(int n){
    if(n<10)printf("%d",n);//结束条件,当n只剩下一位时直接打印
    else{
        printf("%d",n%10);//打印取余求得的数
        n/=10;
        reserve(n);
    }
}
int main(){
    int n;
    scanf("%d",&n);
    reserve(n);
    return 0;
}

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
递归一种在函数定义调用自身的过程。它包括两个主要过程:递去和回归。递去是指函数不断调用自身去解决更小规模的问题,直到达到某个基本情况。回归是指在基本情况下,函数开始返回结果,并依次回归到之前的调用处,解决更大规模的问题。通过这种方式,递归能够解决很多问题,并且在某些情况下,比迭代更简洁和直观。 在Python递归函数主要由两个部分组成:基本情况和递归调用。基本情况是指函数停止递归的条件,通常是一个简单的问题,可以直接返回结果。递归调用是指函数在解决更小规模问题后,再次调用自身来解决剩余的问题。 例如,下面是一个简单的递归函数的示例,用于计算一个数的阶乘: ```python def factorial(n): if n == 0: return 1 else: return n * factorial(n - 1) ``` 在这个例子,当n等于0时,函数返回1作为基本情况。否则,函数调用自身来计算n-1的阶乘,并将结果乘以n,最终返回阶乘结果。 对于理解递归,有几个重要的概念需要注意: 1. 递归函数必须有一个或多个基本情况,以避免进入无限递归的循环。 2. 每次递归调用应该是为了解决一个更小规模的问题。 3. 递归函数应该能够在某个条件下停止递归递归在算法和编程起着重要的作用,可以用于解决许多问题,如排序、搜索、树的遍历等。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值