从明天开始自律学习

今天是星期五,满课,学得有点累,就不搞一些难的问题。

就简单复习一下今天上课的内容吧。

今天主要讲了递归函数的相关知识。

一句话概括:递归是一个调用自己的函数。

当原问题和子问题具有相似性时,求解原问题时将原问题转变为求解子问题,对于子问题又进一步转化为对子问题的子问题的求解,直到当子问题小到一定规模或满足一定条件时,问题的解已知。那么从已知的解,沿着原来分解问题的路线倒推回去,最终就能得到原问题的解。

原问题和子问题的这种相识性被称为“自相似性”。

这样讲可能还是有点模糊,直接上代码!

#include<stdio.h>
//factorial,阶乘
int factorial(int n)
{
    if(n==1)
        return 1;
    return factorial(n-1)*n;
}
int main()
{
    int n;
    scanf("%d",&n);
    printf("%d",factorial(n));
    return 0;
}

这是递归学习当中最简单最具代表性的问题:求阶乘。

当n不等于1的时候,factorial函数的返回值为n*factorial(n-1)。

拿n=3举例,第一次调用f函数(factorial函数)时,传入的参数为3,返回值为f(3-1)*3,在返回值里再次调用f函数,此时传入的参数为2,返回值为f(2-1)*2,此时返回值又一次调用f函数,传入的参数为1,此时调用的返回值为1。

众所周知,调用函数的地方的值可以用函数返回值来代替,也就是说f(3)可以用f(2)*3代替,f(2)可以用f(1)*2代替,f(1)可以用1代替,综上,f(3)可以用3*2*1代替,也就实现了阶乘。

函数f在一次次调用自己的过程中减小了参数的值,“直到当子问题小到一定规模或满足一定条件时,问题的解已知。”然后再一步步往回上一级返回值中代,最终就完成了一次递归函数的计算。

本人大一,学艺不精,可能有讲得不够准确得地方,欢迎大家指出,一起进步!

可能也不会有人看到我的文章,反正这也只是自己认真学习的证明,有自己看到就足够了。

接下来有关学习方面而与计算机无关的学习进度我会发在B站,用来记录自己的学习生活,有想要一起学习,一起进步的同学可以关注一下我的B站账号:阿冰阿冰QAQ。现在暂时上面什么都没有发,只有亿些转发抽奖的动态。

重申一遍,一切都是为了学习和记录学习。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值