Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/295.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 总解(递归func)_Python_Recursion - Fatal编程技术网

Python 总解(递归func)

Python 总解(递归func),python,recursion,Python,Recursion,我有一个递归函数,它可以搜索爬楼梯问题的可能解。 是否可以返回没有全局变量的最终计数 def foo(number, steps): global count if steps == number: count += 1 else: if number - 2 >= steps: foo(number, steps+2) if number -1 >= steps:

我有一个递归函数,它可以搜索爬楼梯问题的可能解。 是否可以返回没有全局变量的最终计数

def foo(number, steps):
    global count
    if steps == number:
        count += 1
    else:
        if number - 2 >= steps:
            foo(number, steps+2)
        if number -1 >= steps:
            foo(number, steps+1)
    return count

一般来说,这类递归算法的思想是在当前调用中使用递归调用的返回值

在这种特殊情况下:从当前位置到达顶部的方法的数量是从一个步骤开始的方法和从两个步骤开始的方法的总和

对于超出目标的情况,我们还可以添加额外的基本案例,并报告在这种情况下没有解决方案,从而简化逻辑。这意味着我们不需要在每次递归调用之前进行单独的检查,它还可以处理要求我们在目标之外开始的情况

最后,我们不需要对所采取的步骤数和到目标的总距离进行单独跟踪:我们所关心的只是剩余的距离

因此:

def路径数(距离):
如果距离小于0:
#我们超越了目标,所以现在我们无法达到目标。
返回0
elif距离==0:
#我们到了,所以只有一种方法可以到达那里:原地等待。
返回1
其他:
#我们尝试了两种可能的步长,并合计结果。
返回路径数(距离-2)+路径数(距离-1)

global
关键字无需删除
global
语句;此变量是函数的局部变量<代码>返回计数就足够了。您的主程序将执行一些操作,例如打印(foo(12,0))如果全局
计数是如何将计数从一个调用传递到下一个调用,这是必要的。@chepner那么
def foo(number,steps,count=0)
会更好。老实说,您把这件事弄得太复杂了。(这有助于认识到问题是计算斐波那契序列的一个隐蔽版本。)
def number_of_paths(distance):
    if distance < 0:
        # We overstepped the goal, so now we can't get there.
        return 0
    elif distance == 0:
        # We're there, so there's exactly one way to get there: wait in place.
        return 1
    else:
        # We try both possible step sizes and total the results.
        return number_of_paths(distance - 2) + number_of_paths(distance - 1)