python函数】在 Python 中怎样让一个递归函数返回此函数的总递归次数?

2021-12-17 10:43发布

5条回答

count = 0 # 添加1def fib(n):    global count # 添加2    count += 1 # 添加3    if n==0:        return 0    elif n==1:        return 1    else:        return fib(n-1) + fib(n-2)print(fib(5)) # 5



20200921文 - 做更棒的自己!
3楼 · 2021-12-19 16:40

为什么不直接用os.walk().
按你这种方法,不需要用filecounter参数,直接返回文件数即可
def func(...) :
 c = 0
 ...
 c += func(...)
 ...
 return c

Danke - 四有青年
4楼 · 2021-12-21 15:23

这个需求用 shell 写更方便嘛,`find /your/path/ -type f | wc -l` 即可

zgtl_20
5楼 · 2021-12-29 20:14

设一个变量count在递归函数里,大概这样:

def a(b):

count=0

if:

return a(b)

count+=1

return count

当然我还不是很清楚return语句的原理,这样貌似可以?可以试试


py大白
6楼 · 2022-02-23 09:41

一般用全局变量可以解决,以斐波那契数列为例

count = 0 # 添加1

def fib(n):

global count # 添加2

count += 1 # 添加3

if n==0:

return 0

elif n==1:

return 1

else:

return fib(n-1) + fib(n-2)

print(fib(5)) # 5

print(count) # 15

也可以通过给函数设置一个属性来实现

def fib(n):

fib.count += 1 # 添加1

if n==0:

return 0

elif n==1:

return 1

else:

return fib(n-1) + fib(n-2)

fib.count = 0 # 添加2

print(fib(5)) # 5

print(fib.count) # 15

一般用全局变量总会觉得有副作用,第二种方法其实也没有避免这种副作用。

最好的方法是下面这种

可以通过一个专门用来数数的类装饰器避免这种副作用,而且可以不需要对fib函数进行更改

class Counter(object) :

def __init__(self, fun) :

self._fun = fun

self.counter=0

def __call__(self,*args, **kwargs) :

self.counter += 1

return self._fun(*args, **kwargs)

# 斐波那契数列

@Counter

def fib(n):

if n==0:

return 0

elif n==1:

return 1

else:

return fib(n-1) + fib(n-2)

print(fib(5)) # 5

print(fib.counter) # 15

# 汉诺塔问题

@Counter

def move(n, a, b, c):

if n == 1:

print(a, '-->', c)

else:

move(n-1, a, c, b)

move(1, a, b, c)

move(n-1, b, a, c)

move(3, 'A', 'B', 'C')

print(move.counter) # 10

更多方法及解释见下面链接

递归次数:12

全局变量的缺陷:1 2


相关问题推荐

  • 回答 5

    define的东西不一定是function,也可能是generator之类的

  • 回答 4

    不可以所有编程最起码都得学函数,分支,循环之后才可以编写代码

  • 回答 4

    >>> import math>>> setattr(math, random, lambda x: x+1)>>> math.random(2903)2904

  • 回答 3

    apply

  • 回答 6

    Python Lambda函数是没有任何名称的函数。它们也称为匿名或无名功能。 lambda一词不是名称,而是关键字。此关键字指定后面的函数是匿名的。现在您已经知道这些匿名函数指的是什么,让我们进一步了解一下如何编写这些Python Lambda函数。...

  • 回答 2

    python里动态构造函数可以使用闭包lista = [funca,funcb,funcc]def make_func(val):     def func(name):         print('hello %s from %s' % (name, val))     return funcfuncs = map(make_func, lista)map(lambda...

  • 回答 2

    估计,题主说的是这些东西首先,我也是初学者,只是平时经常用help查看一下函数库,所以经常遇到*arg代表是不固定传参,可以传,列表,单个元素,元组,他会把你传的这些东西形成一个元组**kwargs也代表不固定传参,可以传字典,他会吧你传的东西形成一个字典...

  • 回答 5

    这里先解释一下几个概念- 位置参数:按位置设置的参数,隐式用元组保存对应形参.平时我们用的大多数是按位置传参.比如有函数def func(a,b,c),调用func(1,2,3).即a=1,b=2,c=3- 关键字参数:可以通过关键字设置参数,不用关心参数位置,隐式用字典保存形参.比如有函...

  • 回答 7

    所谓内置函数,一般都是因为使用比较频繁或是元操作,然后提前定义好,直接调用。这样的内置函数,python里面有很多,大概可以分为基本的数据操作、逻辑操作、集合操作、基本IO操作、反射操作、字符串操作等。...

  • 回答 6

    函数和方法的区别1、函数要手动传self,方法不用传2、如果是一个函数,用类名去调用,如果是一个额方法,用对象去调用 

  • 回答 4

    定义一个函数,需要用到def语句。我们需要函数名以及参数,函数名就是这个函数的名称,参数就是我们的输入。如下图所示,alsp就是函数名,a、b、c就是参数。缩进块都是函数体,通过return语句返回结果。我们通过alsp(1,3,6)调用这个函数,并传入了3个值1、3、...

  • 回答 4

    函数的概念:函数是组织好的、具有一定功能的代码片段。在Python中,定义一个函数要使用def语句,依次写出函数名、括号、括号中的参数和冒号:,然后,在缩进块中编写函数体,函数的返回值用return语句返回。...

  • 回答 4

    函数的调用重函数体至上而下进行函数操作调用是运行函数代码的方式调用时要给出实际参数实际参数替换定义中的参数函数调用后得到返回值

  • 回答 5

    一、输入输出函数1、print()函数2、input() 函数二、字符串函数1、eval(str)函数2、len(str)函数3、str.lower()函数5、str.swapcase()函数6、str.capitalize()函数7、str.title()函数8、str.center(width[,fillchar])函数9、str.ljust(width[,fillcha...

  • 回答 1

    函数式编程,是项目中以函数为主要技术实现的开发模式,在开发过程中将业务受理步骤声明成单独的函数,通过函数之间的调用完成业务受理流程。整体上来说函数式编程和我们思考问题和解决问题的过程十分的相似,所以函数式编程也是面向过程编程的一种实现方式。...

没有解决我的问题,去提问