Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/wordpress/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Python中解决Kempner函数-为什么这个并发函数在达到基本情况后仍在继续?_Python_Function_Recurrence - Fatal编程技术网

在Python中解决Kempner函数-为什么这个并发函数在达到基本情况后仍在继续?

在Python中解决Kempner函数-为什么这个并发函数在达到基本情况后仍在继续?,python,function,recurrence,Python,Function,Recurrence,我一直在做Python难题,我一直在做的一个是使用并发函数来解决Python中的Kempner函数 应用于复合数的凯普纳函数允许找到大于零的最小整数,该整数的阶乘正好除以该数 例如: 凯普纳(6)➞ 3 1!=1%6>0 2!=2%6>0 3!=6%6==0 凯普纳(10)➞ 5 1!=1%10>0 2!=2%10>0 3!=6%10>0 4!=24%10>0 5!=120%10==0 有多种方法可以做到这一点,我看到的解决方案之一是: def kempner(n, i=1, total=1)

我一直在做Python难题,我一直在做的一个是使用并发函数来解决Python中的Kempner函数

应用于复合数的凯普纳函数允许找到大于零的最小整数,该整数的阶乘正好除以该数

例如:
凯普纳(6)➞ 3

1!=1%6>0
2!=2%6>0
3!=6%6==0

凯普纳(10)➞ 5

1!=1%10>0
2!=2%10>0
3!=6%10>0
4!=24%10>0
5!=120%10==0

有多种方法可以做到这一点,我看到的解决方案之一是:

def kempner(n, i=1, total=1):
    if total % n == 0:
        return max(1, i-1)
    else:
        return kempner(n, i+1, total*i)
我理解这是做什么的要点,但是当我通过调试模式运行它并查看变量在做什么时,我可以看到当达到基本条件时(
如果总计%n==0
)和
返回最大值(1,I-1)
返回,则
else
子句中的所有内容将继续运行,直到函数返回到其启动条件(例如,对于
kempner(10)
n=10
i=1
total=1
)。为什么会这样?如果达到基本条件,它肯定应该停止复发


这是一个相当抽象的问题,显然是我知识中的一个盲点。如果有人有任何见解,我将不胜感激。

递归调用与任何其他函数调用一样:当它们返回时,它们将控制权返回给调用它们的任何函数

假设您有一系列编号的递归调用:

1 -> 2 -> 3 -> 4
               Base Case Reached
如果递归调用3调用了递归调用4,并且递归调用4在基本情况下结束,那么从递归调用4返回将返回递归调用3,因为3调用了4。这与任何其他函数调用一样:

def second_func():
    print("Inner")
    return 5

def first_func():
    return second_func()
second\u func
返回时,将控制权返回到
first\u func
,因为
first\u func
调用了
second\u func
。您不会立即退出
second_func
返回到
main
或其他内容。递归调用也是如此。处理递归时唯一的区别是
first_func
second_func
是相同的函数,但这并不影响返回机制


没有办法(除了使用类似异常的东西)立即退出整个调用链。

递归调用与任何其他函数调用一样:当它们返回时,它们将控制权返回给调用它们的任何函数

假设您有一系列编号的递归调用:

1 -> 2 -> 3 -> 4
               Base Case Reached
如果递归调用3调用了递归调用4,并且递归调用4在基本情况下结束,那么从递归调用4返回将返回递归调用3,因为3调用了4。这与任何其他函数调用一样:

def second_func():
    print("Inner")
    return 5

def first_func():
    return second_func()
second\u func
返回时,将控制权返回到
first\u func
,因为
first\u func
调用了
second\u func
。您不会立即退出
second_func
返回到
main
或其他内容。递归调用也是如此。处理递归时唯一的区别是
first_func
second_func
是相同的函数,但这并不影响返回机制


没有办法(除了使用异常之类的方法)立即退出整个呼叫链。

它确实停止了…是的,如果不清楚就道歉。它确实停止了…是的,如果不清楚就道歉。谢谢您的帮助。谢谢您的帮助。