Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/asp.net-mvc-3/4.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 幂递归_Python_Python 3.x_Computer Science - Fatal编程技术网

Python 幂递归

Python 幂递归,python,python-3.x,computer-science,Python,Python 3.x,Computer Science,我正在学习这个指数递归算法,它工作得很好。 但我不明白为什么会这样? 因为我希望它总是返回1,1,1…如果n是偶数,因为a在返回中不相乘 当我尝试recPower(3,2)并一步一步地打印因子时,它将如下所示: 一, 3. 九, 但是,为什么3会出现呢 def recPower(a, n): # raises a to the int power n if n == 0: return 1 else: factor = recPower

我正在学习这个指数递归算法,它工作得很好。 但我不明白为什么会这样?
因为我希望它总是返回1,1,1…如果
n
是偶数,因为a在
返回中不相乘
当我尝试
recPower(3,2)
并一步一步地打印因子时,它将如下所示:

一, 3. 九,

但是,为什么3会出现呢

 def recPower(a, n):
     # raises a to the int power n
    if n == 0:
        return 1
    else:
        factor = recPower(a, n//2)
        if n%2 == 0: # n is even
            return factor * factor
        else:        # n is odd
            return factor * factor * a

只要循序渐进:

recPower(3, 2)
n!=0
因此请转到else分支:

factor = recPower(3, 2//2)
即:

recPower(3, 1)
在这个递归步骤中
n!=0
我们遵循第一个其他分支,
1%2!=0
因此我们遵循第二个else分支。因此,系数为1,
a
==3

因此,此步骤的返回值为:

factor * factor * a


3之所以存在,是因为1*1*3==3您的算法正好实现了这一点:
a**(2*n)=(a**n)*(a**n)
a**(2*n+1)=(a**n)*(a**n)*a
。你到底不明白什么?“因为a在回报中不相乘”取决于你的确切意思,我会说它在底部回报中相乘:
returnfactor*factor*a
。谢谢,我知道了。当n==1时,它返回“a”。我只是认为当初始n开始时,即使是偶数,它也不会返回“a”。谢谢,我完全忘记了
n
将等于1,并调用后者
return
。我只是把太多的注意力放在了初始的
n
值上。
1 * 1 * 3