【问题标题】:How to get my function to be recursive? (Java)如何让我的函数递归? (爪哇)
【发布时间】:2020-08-18 06:34:51
【问题描述】:

我必须创建一个递归函数,该函数将接收“int”堆栈并输出堆栈中元素的平方和。 这是我所拥有的

public int sum_sqr_rec(Stack<Integer> stk){
int sum = 0;
for (int i=0; i<stk.size(); i++){
sum += (stk.get(i) * stk.get(i));
}
return sum;
}

【问题讨论】:

  • if (stk.empty()) return 0; int i = stk.pop(); return i*i + sum_sqr_rec(stk);

标签: java recursion stack


【解决方案1】:

对于递归函数,您需要确定的最重要的事情是何时终止它。

要考虑的第二个重要事项是终止它时要返回的内容。当您开始添加数字时,您以sum = 0 开头。从应该计算数字总和的递归函数中,终止它时可以返回相同的值(即0)。同样,对于应该返回数字乘积的递归函数,您可以在终止时返回 1

import java.util.Stack;

public class Main {
    public static void main(String[] args) {
        Stack<Integer> stack = new Stack<Integer>();
        stack.add(2);
        stack.add(3);
        stack.add(4);
        stack.add(5);
        System.out.println(sum_sqr_rec(stack));
    }

    static int sum_sqr_rec(Stack<Integer> stk) {
        if (stk.isEmpty()) {
            return 0;
        }
        int n = stk.pop();
        return n * n + sum_sqr_rec(stk);
    }
}

输出:

54

【讨论】:

    【解决方案2】:

    你可以像这样使用递归:

        public static void main(String[] args) {
            Stack<Integer> stack = new Stack<>();
            stack.add(2);
            stack.add(2);
            stack.add(4);
            stack.add(5);
            System.out.println(sum_sqr_rec(stack));
        }
    
        public static int sum_sqr_rec(Stack<Integer> stack) {
            if (stack.isEmpty())
                return 0;
            return stack.peek() * stack.pop() + sum_sqr_rec(stack);
        }
    

    【讨论】:

      【解决方案3】:

      请注意,我直接使用 Deque 接口而不是 Stack 类(文档说它应该优先使用 Stack 类)。

          public int recursive(Deque<Integer> stk){
              if (stk.Empty()){
                  return 0;
              }
              return Math.pow(stack.pop(), 2) + recursive(stk);
          }
      
      

      【讨论】:

        【解决方案4】:

        有很多方法可以做到这一点。但是如果你不想破坏堆栈,你可以这样做。堆栈在返回过程中被恢复。

        • n 被弹出。这会耗尽数字堆栈并将n 保留在本地调用堆栈中以供以后使用。
        • 元素的平方保存在k中方法的调用栈中

        • r 被初始化为最终计数。

        • 一旦堆栈为空,只需将 n 推回 stk 并返回保存的平方和。
        static int sum_sqr_rec(Stack<Integer> stk) {
              int n = stk.pop();
              int k = n*n;
              int r = 0;
              if (!stk.isEmpty()) {
                    r = sum_sqr_rec(stk);
              }
              stk.push(n);
              return r + k;
        }
        

        使用这个调用序列的语句。

        System.out.println(stack);
        System.out.println(sum_sqr_rec(stack));
        System.out.println(stack);
        

        结果如下

        [2, 3, 4, 5]
        54
        [2, 3, 4, 5]
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2011-02-17
          • 2012-06-25
          • 2023-03-05
          • 1970-01-01
          • 2011-05-23
          • 1970-01-01
          • 2011-09-02
          • 1970-01-01
          相关资源
          最近更新 更多