一道递归算法题目

问题通过构建一个递归函数,随便取中间的一种情况,然后联系前面的情况,将50元和100元的人数设为变量即可。

这个实现的算法其实就是递归,通过递归函数实现。不过这里却是层层递归,每个递归下面都有多个分叉。第一个参数n很好理解,就是题目给的整数n,第二个参数k是题目说的把n分成k个数,题目求的是,能有多少种不重复的分法。


难理解的是第三个参数,什么鬼?


看第一幅图就知道了,其实这个参数是用来剪枝的,何谓剪呢?就是把每个递归下的分叉减少,以满足要求。

这里的要求是不重复,这就让我们每次都要求我们选择的第多少个数(反正不能大于k)的时候对于不能大于(或小于,看设定)前面选择的数。

有点费解是吧?看第三副图就知道了。这里的now就是起到这个作用的。用来记录你前面从小开始选的数,这次选的数不能小于它,小于的话有什么后果呢?就是和前面的重复了呗。至于为什么重复?递归看着好多层,你怎么知道重复?呃,这个,这个,还是举个栗子吧。

1 2 3 和2 1 3就是重复的,所以第二个选的数就不能比第一个选的数小,不然就重复的,而且一定会重复的至于为什么,因为无数次的尝试告诉我,不可能不重复的。就不想真的去证明了,数学的东西,看的主要是感觉,真的证明起来就有点烦了。

第一个选的数就肯定是从1开始选啦,因为我们是从小到大排,1不小于1。一直选到不大于整数n/k为止。


那为什么不能大于整数n/k呢?


原因便是,每一次选的数都不能比前一次选的数小,所以吧,最多相等,所以每个数最大的就是n/k,再大就不行了,再大就会出现小的数,不平衡了。感受一下就知道了,无须证明的。

哇,那问题解决了哇,好简单,每次递归穷举,还可以剪掉重复的数,问题就解决了。那问题又来了。


前面的if(k==1)s++是什么鬼?


我们都知道s是用来计算次数的,这次数是根据最后面的子结点来决定的。所以算最后面的子结点就好了。我们知道,每次递归迭代,划分次数k都会减掉一次,所以呢,最后k为1的时候就不迭代递归了,就把每一次都给s加1,最后给记下来好了,就得到了方案个数。

后面又看到了这个奇怪的代码,这是什么操作呢?我们先看k==1的部分,除了s++外,还多了奇怪的代码段。

第三个参数好像也改了,之前我们用了记录所取数的下界,而现在好像用来做数组的下标,用数组来记录每种分法的结果。每次输出记录都是从最后结点开始的,那是递归完最后的数。

数组里面放的,也是来记录你前面从小开始选的数,然后最后输出。

还有一个不用三个参数的代码:

看到这个代码,其它的还好理解,可是里面的s=s+fXX要怎么理解呢?

第二个参数k-1很好理解,就是拆分的次数减1,因为已经选好一个数了。

可是,前面选的数怎么知道是(i-1)*k+1呢?

不懂就把数字代进去吧。初始的时候i等于1,这个数等于1,没毛病。

i等于2的时候,假设k为6,则这个数为7,这里透露着诡异。再看下面这个图。

其实就是简化了问题,没毛病。8分3份,第一份是2,则可分为2 1+ 1+,然后4可以继续分,

大家看到这个问题,挺类似的,依旧是递归,和前面的类似,区别只是,没有限制可以分为多少个数。所以后面选的数的限制最大只是n/2,只需要防止选的数不比n大就可以了。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 218,546评论 6 507
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,224评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,911评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,737评论 1 294
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,753评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,598评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,338评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,249评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,696评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,888评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,013评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,731评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,348评论 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,929评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,048评论 1 270
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,203评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,960评论 2 355