递归实现Spy Number函数:内部返回布尔值外部无法正常打印问题
递归实现Spy Number函数的返回值问题解决
你的问题出在递归分支没有返回递归调用的结果:当n != 0时,你调用了spynum(n//10,rem,sm,pd),但没有把这个调用的返回值传递回去。这就导致当前层级的函数执行完递归调用后,默认返回None——只有最底层基准条件(n==0)返回了正确的布尔值,但这个值没有被上层递归传递出来,所以外部打印函数返回值时拿到的是None,而非预期的结果。
修改后的代码
只需要在else分支的递归调用前加上return,让递归结果逐层向上传递即可:
def spynum(n, r, sm=0, pd=1): if n == 0: print(sm == pd) return sm == pd else: rem = n % 10 sm += rem pd *= rem print(sm, pd, rem) return spynum(n//10, rem, sm, pd) # 新增return,传递递归结果 num = 1124 print(spynum(num, num%10, 0, 1))
运行修改后的代码,内部的print和外部的print都会输出True(1124的数字和为1+1+2+4=8,乘积为112*4=8,符合Spy Number的定义)。
内容的提问来源于stack exchange,提问作者6 A.S.Harish Kumar
相关产品推荐
相关产品推荐

