更新:我可以知道递归如何工作于类似的代码吗?

def fib( n ):
    global cnt
    cnt += 1 #global cnt is assigned and changed
    if n <= 2:
        return 1
    return fib( n - 1 ) + fib( n - 2 )

cnt = 0
print(fib( 10 ))
print("fib is called", cnt, "times") #109 times!

老问题:

def power_of_two(n):
    global cnt
    cnt += 1
    if n == 0:
        return 1
    return 2 * power_of_two(n-1)
cnt = 0
print(power_of_two(3))
print("power_of_two is called", cnt, "times")

问:cnt的值是多少?当执行上述代码时,函数power_of_two()被调用了多少次?

A. 8, 4 times
B. 4, 3 times
C. 6, 4 times
D. 3, 3 times

我运行了代码,它显示cnt是4,那么它应该是答案B吗? 但是对于答案B,它说代码被调用了3次,但它不应该是4次吗? 如果是3,我可以知道为什么吗? 我也想过 Select 答案A,因为它更有意义,但它要求cnt的值,而不是(power_of_two(3))的值. 还是我弄错了问题/我的老师把问题写错了? 我知道这是一个基本的编程问题,但非常感谢您的帮助:)

推荐答案

这将是4次n=3,步骤为您的代码.

对于n==3你的cnt ==1 return 2* #递归步骤1

对于n==2,它将是cnt ==2 return 2*2* #递归步骤2

对于n==1,它将是cnt==3 return 2*2*2* #递归步骤3

而最后一步是停止递归与if n==0语句,所以cnt==4 return 2*2*2*1 #递归步骤4

result will be A) 8, 4 times

Python相关问答推荐

如何在Deliveryter笔记本中从同步上下文正确地安排和等待Delivercio代码中的结果?

Python 3.12中的通用[T]类方法隐式类型检索

Python多处理:当我在一个巨大的pandas数据框架上启动许多进程时,程序就会陷入困境

将整组数组拆分为最小值与最大值之和的子数组

如何根据参数推断对象的返回类型?

为什么默认情况下所有Python类都是可调用的?

用NumPy优化a[i] = a[i-1]*b[i] + c[i]的迭代计算

将tdqm与cx.Oracle查询集成

如何从数据库上传数据到html?

如何使用scipy的curve_fit与约束,其中拟合的曲线总是在观测值之下?

幂集,其中每个元素可以是正或负""""

Odoo16:模板中使用的docs变量在哪里定义?

根据Pandas中带条件的两个列的值创建新列

如何在PythonPandas 中对同一个浮动列进行逐行划分?

我怎么才能用拉夫分拣呢?

查找查找表中存在的列值组合

替换包含Python DataFrame中的值的<;

与同步和异步客户端兼容的Python函数

将数据从一个单元格保存到Jupyter笔记本中的下一个单元格

如何计算Pandas 中具有特定条件的行之间的天差