首页 > 解决方案 > 简单的递归函数不能很好地工作

问题描述

这只是一个简单的递归函数测试。

它应该在 n = 3 处停止,但不是。

你能告诉我我的代码哪里出错了吗?

谢谢!

>> recursiveFunction(0)

   101

     1

g
   102

     1

g
   103

     1

     2

     3

     2

g
   103

     1

     2

     3

     3

g
   103

     1

     2

     3

     2

g
   102

     1

g
   103

     1

     2

     3

     2

g
   103

     1

     2

     3

     3

g
   103

     1

     2

     3

     3

g
   102

     1

g
   103

     1

     2

     3

     2

g
   103

     1

     2

     3

     3

g
   103

     1

     2

     3
function recursiveFunction(callHierarchie)
    callHierarchie = callHierarchie + 1;
    disp(callHierarchie + 100);
    for n = 1:3
        disp(n);
        if callHierarchie <= 2
            disp('g');
            recursiveFunction(callHierarchie);
        end
    end
end

标签: matlabrecursion

解决方案


问题在于您如何生成输出以及如何解释输出。这是一个生成相同输出的 Python 等效函数:

def recursiveFunction1(callHierarchie):
    callHierarchie = callHierarchie + 1
    print("{:>6}".format(callHierarchie + 100))

    for n in range(1, 4):
        print("{:>6}".format(n))
        if callHierarchie <= 2:
            print('g')
            recursiveFunction(callHierarchie)

recursiveFunction(0)

人们可以验证它产生相同的输出。让我们根据递归级别修改代码以缩进:

def recursiveFunction(callHierarchie):
    callHierarchie = callHierarchie + 1
    print(" " * callHierarchie, "{:>6}".format(callHierarchie + 100))

    for n in range(1, 4):
        print(" " * callHierarchie, "{:>6}".format(n))
        if callHierarchie <= 2:
            print(" " * callHierarchie, 'g')
            recursiveFunction(callHierarchie)

现在输出显示略有不同:

% python3 test.py
     101
       1
  g
      102
        1
   g
       103
         1
         2
         3
        2
   g
       103
         1
         2
         3
        3
   g
       103
         1
         2
         3
       2
  g
      102
        1
   g
       103
         1
         2
         3
        2
   g
       103
         1
         2
         3
        3
   g
       103
         1
         2
         3
       3
  g
      102
        1
   g
       103
         1
         2
         3
        2
   g
       103
         1
         2
         3
        3
   g
       103
         1
         2
         3
% 

您可以看到它n确实停在 3 处,但是您看到的额外数字n处于不同的递归级别!


推荐阅读