当前位置: 首页 > 知识库问答 >
问题:

递归程序流

戴化
2023-03-14

我有一些教科书式的代码,它以递归方式调用自己。我不了解程序流。代码如下:

def Recur_Factorial_Data(DataArray):

    numbers = list(DataArray)
    num_counter = 0

    list_of_results = []

    for num_float in numbers:

        n = int(num_float)

1.      result = Recur_Factorial(n)

        list_of_results.append(result)

def Recur_Factorial(num):

        if num == 1:
2.          return num
        else:
            result = num*Recur_Factorial(num-1)
3.         return result

        if num < 0:
            return -1
        elif num == 0:
            return 0
        else:
            return 0

在Recur_Factorial_Data中,我循环遍历数据元素并调用Recur_Factorial,它将其值返回给调用函数(Recur_Factorial_Data)。我预计标记为2(“返回num”)和3(“返回结果”)的行将始终返回一个值给调用函数,但事实并非如此。例如,初始值(来自数组DataArray)为11,函数重复调用自己,直到num为1;此时,程序落到标记为2的行,但它不会循环返回标记为1的行。相反,它会落到下一行。标记为3的行也发生了同样的事情——我希望它将结果返回给调用函数,但它在某些情况下会这样做,而在其他情况下不会。

我希望这样的描述足以理解我的问题——我只是不知道为什么每次返回都不循环返回结果给调用函数。

编辑:理解递归函数如何工作的问题非常有帮助,我向任何对递归感兴趣的人推荐。我这里的问题有点不同——我是在调用递归函数的Python代码的程序流的上下文中提出的。

共有1个答案

柳高卓
2023-03-14

如果它递归调用自己10次,它将处于递归的第10级,并且应该在有一个带有中间结果的递归调用的地方返回10次,然后才从递归函数退出到它被调用的地方。了解有关递归的更多信息

还要尝试以这种方式重新排列Recur_Factorial函数中的指令:

def Recur_Factorial(num):
    if num < 0:
        return -1
    elif num == 0:
        return 0
    elif num == 1:
        return num
    else:
        return num * Recur_Factorial(num-1)
 类似资料:
  • 在递归过程中,将在过程中对过程进行重复调用。 让我们考虑以下代码 - to spiral_recur :n if :n < 1 [stop] fd :n rt 20 spiral_recur 0.95 * :n end 已经从过程体本身调用了过程spiral_recur。 以下屏幕截图显示了代码的执行和输出。

  • 本文向大家介绍什么是递归?用Java写一个简单的递归程序,包括了什么是递归?用Java写一个简单的递归程序的使用技巧和注意事项,需要的朋友参考一下 什么是递归?用Java写一个简单的递归程序 递归的定义 递归(recursion):以此类推是递归的基本思想,将规模大的问题转化为规模小的问题来解决。 递归的要素 自定义递归函数,并确定函数的基本功能 例如Java从键盘输入一个数,求输入这个数的阶乘。

  • 主要内容:递归实现,非递归实现二叉树后序遍历的实现思想是:从根节点出发,依次遍历各节点的左右子树,直到当前节点左右子树遍历完成后,才访问该节点元素。 图 1 二叉树   如图 1 中,对此二叉树进行后序遍历的操作过程为: 从根节点 1 开始,遍历该节点的左子树(以节点 2 为根节点); 遍历节点 2 的左子树(以节点 4 为根节点); 由于节点 4 既没有左子树,也没有右子树,此时访问该节点中的元素 4,并回退到节点 2 ,遍

  • 主要内容:递归实现,非递归实现二叉树中序遍历的实现思想是: 访问当前节点的左子树; 访问根节点; 访问当前节点的右子树; 图 1 二叉树   以图  1 为例,采用中序遍历的思想遍历该二叉树的过程为: 访问该二叉树的根节点,找到 1; 遍历节点 1 的左子树,找到节点 2; 遍历节点 2 的左子树,找到节点 4; 由于节点 4 无左孩子,因此找到节点 4,并遍历节点 4 的右子树; 由于节点 4 无右子树,因此节点 2 的左子

  • 主要内容:递归实现,非递归实现二叉树先序遍历的实现思想是: 访问根节点; 访问当前节点的左子树; 若当前节点无左子树,则访问当前节点的右子树; 图 1 二叉树   以图  1 为例,采用先序遍历的思想遍历该二叉树的过程为: 访问该二叉树的根节点,找到 1; 访问节点 1 的左子树,找到节点 2; 访问节点 2 的左子树,找到节点 4; 由于访问节点 4 左子树失败,且也没有右子树,因此以节点 4 为根节点的子树遍历完成。但节点

  • 我对函数式编程很陌生,尤其是下面使用的Scheme。我正在尝试使以下函数是递归的,尾递归的。基本上,该函数的作用是对两个字符串的对齐方式进行评分。当给定两个字符串作为输入时,它会比较每个“列”字符,并根据在称为 scorer 的函数中实现的评分方案(由下面的代码中的函数调用)来累积该对齐的分数。 我有一个想法,用一个帮助函数来累积分数,但我不太确定如何去做,因此我该如何让下面的函数尾递归呢?