前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >一道小学三年级的题目把我困住了

一道小学三年级的题目把我困住了

作者头像
Ed_Frey
发布2019-07-04 15:10:33
4070
发布2019-07-04 15:10:33
举报
文章被收录于专栏:奔跑的键盘侠奔跑的键盘侠
上周的考试,专业课C++,题目很基础、没什么难题,甚至有几道题跟去年一模一样,可我却傻眼了!看过题目却不知道答案!!

由于这次考试太仓促,往届真题搞到了,答案没搞到、更别说挤时间自己去做一份正常答案了。这些反复考的题目,的确有点让人反胃,相反,有一道全新的题目,让我眼前一亮,可我愣是苦思冥想了两天不得其解,网上也没能找到答案,这不,就来分享给大家了。

这道题目说简单也是非常简单,要求输出以下格式的内容(参数n=5时):

a

aaa

aaaaa

这是逗我玩么?小学生都会的好么,有n种方法可以实现呀!可是对算法有要求,必须使用递归方法,递归不就是反复调用自身么,可能三下五除二就能解决掉吧,暗自庆幸中……可我发现,问题么有这么简单,我根本没有理解递归的真正内涵,考场上五分钟、十分钟、半小时过去了,直到交卷也没想出来。

关于递归的定义:程序调用自身的编程技巧称为递归( recursion)。后来又去科普了一下,很多帖子的解说,高潮迭起,包括我也看的心潮澎湃,感觉都能看懂,最经典的是阶乘使用递归方法,很多教材拿这个做例题,看起来贼溜,模仿一下也没问题,可当遇到这个题目时,有点秀才遇到兵了。。

到底递归是什么呢?我的理解是,装什么鬼弄什么神,不就是后面一项比前面一项多了个什么嘛!比如,阶乘,是多乘了一个数而已。对于这道题目呢?是多了一行,多的这行是什么?没错!是多一行a,仅此而已。

那代码怎么写,想必大家就有点眉目了,我先把python的实现代码贴出来:

代码语言:javascript
复制
#!/usr/bin/env python3.6
# -*- coding: utf-8 -*-
#__author__:  Ed Frey
#Date: 18/12/25

def newprint(n):

    if n == 1:
        print("a")
    else:
        newprint(n - 2)
        print("a" * n)

if __name__ == '__main__':

    pprint(5)
    
这里的n就不做额外限定修饰了,假定我们只能取正奇数。运行结果如下:

/usr/local/bin/python3.6 /Users/.../递归.py

a

aaa

aaaaa

Process finished with exit code 0

阶乘的用法这里就不赘述了,感兴趣的小伙伴可以自行科普。递归,其实真的没什么技术含量,更多的是数学的归纳方法,归纳总结这个“数列”的规律,能找出通项公式来,再去编码,就so easy了。

阶乘,是等比数列,而上面这道题目,千万注意,不能单行单行的去比较,不然可能就掉坑里了,这题就是个等差数列,公差是最后一行,而不是2个a哟。因为我最开始重心就放到2个a的差额上,懵逼了好久。

其实在学习一些新的方法时,经常会雀跃欲试却无从下手,可能还是总结观察不够深入吧。这么简单的一个方法,相信大家可以理解其精髓了吧。有什么疑问,可以留言哈。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2018-12-25,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 奔跑的键盘侠 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档