希望了解此代码块的逻辑故障

时间:2019-04-21 00:07:19

标签: python-3.x

仅使用一些基本代码(阶乘),但不能引用它来使我了解如何实现正确的结果。每个循环的结果似乎都没有存储在任何地方-那么代码如何记住迭代值? (我知道有模块-这只是一个逻辑练习)

def factoral2(num):
if num == 0:
    return 1
return num * factoral2(num-1)

print(factoral2(int(input(“输入数字以查找阶乘:”))))

上面是我不太确定它是如何工作的方法

def factoral(num):     数字= []     对于范围(0,num)中的i:         number.append(num)         num = num-1     打印(数量)     产品= 1     对于x数:         产品* = x     退货

print(factoral(int(input(“输入数字以查找阶乘:”))))

这是我的解决方案,显然比理想的还要冗长

两者都可以-只是试图了解优化版本的逻辑

3 个答案:

答案 0 :(得分:0)

这是一个递归函数,它自己调用num - 1作为参数。 提供的功能:

def factoral2(num):
    if num == 0:
        return 1
    return num * factoral2(num-1)

“开始扩展”到此:

def factoral2(num):
    result = 1

    while (num != 0):
        result *= num
        num -= 1

    return result

value = factoral2(4)如下所示:

num = 4
    num = 3
        num = 2
            num = 1
                num = 0; return 1
            result = 1
        result = 2 * 1
    result = 3 * 2
result = 4 * 6

value = 24

答案 1 :(得分:0)

好的,我们来看一个示例,假设user inputs 2 -> num=2。 首先,我们必须逐步降低(本质上我们需要num等于0)

  • 首先,我们调用factorial(2),然后检查if语句是否为假。
  • 因此factorial(2) = return num * factorial(num-1) = return 2 * factorial(1)
  • 上面的语句需要先计算factorial(1)的值,然后才能返回值,所以让我们继续执行
  • 首先,我们调用factorial(1),并检查if语句== false
  • 因此factorial(1) = return num * factorial(num-1) = return 1* factorial(0)
  • 上面的语句需要先计算出factorial(0)的值,然后才能返回值,所以让我们继续这样做
  • 首先,我们调用factorial(0),并检查if语句== true
  • 因此factorial(0) = 1

现在我们可以开始构建

  • factorial(0) = 1
  • 现在就开始插入值
  • 我们说factorial(1) = return 1* factorial(0) = return 1* 1 = return 1
  • factorial(1) = 1
  • 现在我们可以插入更多值
  • 我们说factorial(2) = return 2* factorial(1) = return 2 * 1 = return 2
  • factorial(2) = 2

答案 2 :(得分:0)

感谢Andreas和below_avg_st的帮助。 现在变得更加有意义。

据我所见:

  1. 如果未分配中断条件,则递归函数将生成无限循环。
  2. (我将下面的内容重写为更进一步说明该逻辑)。如果X不等于0,请在递减X的同时继续遍历该函数。
  3. 当循环中断时-(因为X = 0)将值分配为1-退出循环。

    def test(x):
        if x != 0:
            return x * test(x-1)
        else:
            return 1
    
    test(4)
    

感谢大家的帮助