n层循环嵌套的非递归实现

发布于 2022-09-02 15:50:01 字数 139 浏览 9 评论 0

想用一个n层的嵌套模拟近位,如000,001,002……010,011,012……xxx,如果用传统递归实现的话当层数多(如10层以上)经常无法实现,有没有非递归的实现,比如用一个堆栈模拟层数,思路不是很清晰,请各位指教,请给出伪代码或python代码实现,谢谢。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

幼儿园老大 2022-09-09 15:50:01

不清楚“无法实现”是一个什么意思,你说列举的嵌套等概念最好用的不就是递归吗。

清醇 2022-09-09 15:50:01

我用Java写了段小程序,不知道题主是不是想试这种情况,仓促写就,也请批评指正。

import java.util.Stack;

public class BinaryAddition {
    private static Stack<Integer> additionStack = new Stack<>();

    public static int[] positiveBinaryAdd(int[] a, int[] b) {
        int bit = 0;
        int i = a.length - 1;
        int j = b.length - 1;
        for (; 0 <= i && 0 <= j; --i, --j) {
            if ((0 > a[i]) || (1 < a[i]) || (0 > b[j]) || (1 < b[j])) {
                return null;
            }
            int tmp = a[i] + b[j] + bit;
            additionStack.push(Integer.valueOf(tmp % 2));
            bit = 1 < tmp ? 1 : 0;
        }
        if (i == j) {
            if (1 == bit) {
                additionStack.push(Integer.valueOf(bit));
            }
        } else {
            int[] m = i > j ? a : b;
            int index = Math.max(i, j);
            if (0 == bit) {
                for (i = index; 0 <= i; --i) {
                    additionStack.push(Integer.valueOf(m[i]));
                }
            } else {
                for (i = index; 0 <= i; --i) {
                    if (1 < m[i] + bit) {
                        additionStack.push(Integer.valueOf(0));
                        bit = 1;
                    } else {
                        additionStack.push(Integer.valueOf(m[i] + bit));
                        bit = 0;
                    }
                }
            }
        }
        if (1 == bit) {
            additionStack.push(Integer.valueOf(bit));
        }
        int[] result = new int[additionStack.size()];
        for (i = 0; i < result.length; ++i) {
            result[i] = additionStack.pop().intValue();
        }
        return result;
    }
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文