递归时的变量值变化,Python 3

问题描述 投票:0回答:1

嘿,所以我很新的编程一般,我有一个裂缝在一个问题,我发现collatz函数。

经过一番试错,我写的代码如下。

def collatz(number):
    if number % 2 == 0:
        number = number//2
        print(number)
        return number
    elif number%2 != 0:
        number = 3*number + 1
        print(number)
        return number

n = int(input("plz enter the number:")) 

while n != 1:
    n = collatz(n) 

输出:

plz enter the number:3
10
5
16
8
4
2
1

这段代码是可行的,但我不知道变量值是如何分配的,因为在运行这个程序后,我可以看到在shell中 "number = 3",但 "n = 1",为什么会这样?number "不应该也等于1吗?因为我在函数中返回的是number的值?

也只是为了澄清我的概念,在初始时刻,当我输入n = 3,在那一刻n = number = 3,那么这个返回的 "number "的值是否会自动成为新的n值,当我在while循环中调用它?只是想检查一下,因为我有点弱,当它涉及到做需要传递参数的东西。

编辑。

为什么这个例子和刚才回答的不一样?

def testfile(number):
    number = number -1 
    print(number)
    return number

n = int(input("enter:"))

while n != 2:
    n = testfile(n)

输出。

enter:5
4
3
2

当输入为n=5时,为什么数字=3而不是下面解释的5?

python variables recursion
1个回答
0
投票

你的程序是这样工作的。

你要求一个数字,并把它存储在变量 "collatz(number) "中。n.

你打开一个循环,一直到 n1

每次循环重复时,你都会调用你的函数并传递一个n的copy。n 不会改变。

复制被称为 number. 你用你的小把戏来表演 number,将其输出到屏幕上,而令人困惑的是:你返回了一个关于 数目 回到你的循环。那它去哪了?它直接回到 n. 这将覆盖任何在 n 以前。

© www.soinside.com 2019 - 2024. All rights reserved.