专栏首页奔跑的键盘侠一道小学三年级的题目把我困住了

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

上周的考试,专业课C++,题目很基础、没什么难题,甚至有几道题跟去年一模一样,可我却傻眼了!看过题目却不知道答案!!

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

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

a

aaa

aaaaa

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

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

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

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

#!/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的差额上,懵逼了好久。

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

本文分享自微信公众号 - 奔跑的键盘侠(runningkeyboardhero),作者:我是奔跑的键盘侠

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2018-12-25

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 梦里探花——C++没完又来一个C

    隐约觉得这是大一时的必修课,BUT,现在脑海里只剩下当时枯燥的理论,学的云里雾里,上机完全没印象了。如果能有合适的应用场景练习,可能就是一门有趣的课了。

    Ed_Frey
  • Python—字符串常用的格式化方法

    其实如果要通读字符串的所有方法,只需要在pycharm中输入st.就会自动弹出字符串的方法列表,挨个试过去就知道了

    Ed_Frey
  • 关于递归的另类用法

    接上一篇关于递归的用法一道小学三年级的题目把我困住了,再贴一下案件精灵的实现代码,如下:

    Ed_Frey
  • Java的递归算法

    递归:无限调用自身这个函数,每次调用总会改动一个关键变量,直到这个关键变量达到边界的时候,不再调用。

    用户5224393
  • 递归——求阶乘

    版权声明:博客文章都是作者辛苦整理的,转载请注明出处,谢谢! https://blog.csdn....

    Tyan
  • PHP程序员:你过来,给我说说 $this,self,static 有什么区别?

    我们每天都在敲代码,对着各种各样的类与继承。面向对象的编程设计方式,裹挟着PHP程序员加入 OOP 大军。

    程序员小助手
  • 【从0到1学算法】递归

    今天我们将学习一种优雅的问题解决方式--递归。 对于它,通常有3个阵营:恨它的、爱它的以及恨了几年后又爱上它。你属于哪一个?

    KEN DO EVERTHING
  • 面向对象

    析构函数(在实例释放、销毁的时候自动执行的、通常用于一些收尾工作,如:关闭一些数据库链接,关闭打开的临时文件 当程序执行完以后, 析构__del__(self)...

    py3study
  • python 面向对象

    面向对象编程——Object Oriented Programming,简称OOP,是一种程序设计思想。OOP把对象作为程序的基本单元,一个对象包含了数据和操作...

    py3study
  • python的面向对象编程

    面向对象:Object Oriented Programming,简称OOP,即面向对象程序设计。

    没有故事的陈师傅

扫码关注云+社区

领取腾讯云代金券