程序问答   发布时间:2022-06-02  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了为什么函数在单独调用时返回不同的东西 VS 在调用两次时返回不同的东西大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决为什么函数在单独调用时返回不同的东西 VS 在调用两次时返回不同的东西?

开发过程中遇到为什么函数在单独调用时返回不同的东西 VS 在调用两次时返回不同的东西的问题如何解决?下面主要结合日常开发的经验,给出你关于为什么函数在单独调用时返回不同的东西 VS 在调用两次时返回不同的东西的解决方法建议,希望对你解决为什么函数在单独调用时返回不同的东西 VS 在调用两次时返回不同的东西有所启发或帮助;

所以我有一个递归函数,我用不同的参数调用了 2 次,但第二次调用它时,它没有给出正确的结果,只有当我第一次调用它而不是第二次时才给出正确的结果。也许是内存或缓存问题?

def m(n):
    s= [int(char) for char in str(n)]
    product = 1
    for x in s:
       product *= x
    return product
i = 0
def persistence(n):
    global i
   
    if len(str(n)) == 1:
       return i
    else:
        j = m(n)
        i+=1
        s = persistence(j)
        return s 



print(persistence(39)) 
print(persistence(4)) #returns 3 when called with the top one but 0 when called alone



解决方法

问题是您使用 i 作为全局变量。当您再次执行该方法时,您的 i

def m(n):
    s= [int(char) for char in str(n)]
    product = 1
    for x in s:
       product *= x
    return product

def persistence_recursive(n,i):
    if len(str(n)) == 1:
       return i
    else:
        j = m(n)
        i+=1
        s = persistence_recursive(j,i)
        return s 

def persistence(n):
   return persistence_recursive(n,0)



print(persistence(39)) # returns 3
print(persistence(4)) # returns 0
,

您的函数持久性中有一个条件 len(str(n)),因此如果 n 是 0 到 9 之间的数字,则返回 global i

当您单独调用 print(persistence(4)) 时,您的函数返回 global i(等于 0)。

当你先调用print(persistence(39)),然后是print(persistence(4)),第一个调用设置global i为3,第二个调用juste返回global i的值,即就像刚刚设置为 3 一样。

我不太明白你想要做什么,但也许你的问题来自于 global 的使用。

大佬总结

以上是大佬教程为你收集整理的为什么函数在单独调用时返回不同的东西 VS 在调用两次时返回不同的东西全部内容,希望文章能够帮你解决为什么函数在单独调用时返回不同的东西 VS 在调用两次时返回不同的东西所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签: