当前位置:  开发笔记 > 编程语言 > 正文

如何在没有递归的情况下解决这个问题?

如何解决《如何在没有递归的情况下解决这个问题?》经验,为你挑选了1个好方法。

我正在努力帮助我的儿子解决数学问题.这似乎是让他接触某些节目的好机会.我可以看到递归解决方案,但也许迭代的解决方案更容易解释.到目前为止他学到的语言是SmallBasic,它不能很好地支持递归(没有局部变量).我并不反对教另一种语言,但仍然想要了解是否有一种很好的方法可以在没有递归的情况下解决这个问题.

问题是:给定数字序列1 2 3 4 5 6 7 8 9,在数字之间插入+和 - ,使结果加起来为101.例如,1 + 23 + 4 + 5 + 67-8 + 9 = 101.

递归解决方案看起来像这样:

next(total, number, nextNumber, sequenceString)
{
    //add
    next(total + number, ...);

    //subtract
    next(total - number, ...);

    //do nothing (multiply)
    next(total, number * 10, ...);
}

是否有一个迭代解决方案,这不是非常复杂?



1> Thomas Kamme..:

考虑数字之间的空格1 2 3 4 5 6 7 8 9.有8个这样的间隙空间或槽.

每个这样的空间可以用+, - 或任何东西填充(表示形成更长的数字).

这是八个插槽中每个插槽的三种可能性.将数字分配给三个可能的填充符:

 0 --> +
 1 --> -
 2 --> (nothing)

现在每个8位三位字符串对应一个解决方案.举些例子:

 00000000 --> 1+2+3+4+5+6+7+8+9
 00000001 --> 1+2+3+4+5+6+7+8-9
 00000002 --> 1+2+3+4+5+6+7+89
 22222222 --> 123456789

现在编写一个简单的循环,从tr0000的00000000到22222222计数.将上面的每个数字解释为上面的解决方案,一旦遇到产生目标的解决方案就停止,101,如果在没有达到目标值的情况下到达目的地,则报告失败.

对于类固醇有3 ^ 8(指数,不是xor或3**8,或者

 3*3*3*3*3*3*3*3

对于强烈的文字思考)可能的解决方案.那只是6561; 你可以非常轻松地以这种方式强行蛮力.

推荐阅读
linjiabin43
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有