社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Python

for循环内递归-Python

daniellga • 5 年前 • 1800 次点击  

def recur_factorial(n, j=0):
    j += 1
    print('j=',j)
    print('n=', n)
    if n == 1:
        return(1)
    else:
        for i in range(2, n):
            print('i=', i)
            return i * recur_factorial(n = i - 1, j = j)
    print('reached end of function')

使用此输入:

recur_factorial(5)

我得到以下输出:

j= 1
n= 5
i= 2
j= 2
n= 1
2
Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/53603
 
1800 次点击  
文章 [ 3 ]  |  最新文章 5 年前
Babu Kanagaraj
Reply   •   1 楼
Babu Kanagaraj    5 年前

def recur_factorial(n, j=0):
j += 1
print('j=',j)
print('n=', n)    
if n == 1:
    return(1)
else:
    stop = n
    for i in range(2, stop + 1):
        print('i=', i)
        return n * recur_factorial(n = n - 1, j = j)
print('reached end of function') ##This statement will not execute since the function is returning before this statement
sammy
Reply   •   2 楼
sammy    5 年前

正如已经指出的,具体的问题是您在for循环中返回,该循环将完全结束函数。

基本上,你正在做的是混合递归和迭代实现。迭代实现使用for循环,然后不需要调用自己(因为它“知道”要运行循环多少次(即n次)并执行计算中的单个步骤)。

递归实现不使用for循环,也不知道运行单个计算步骤的次数(即使在第一次调用函数并设置n的运行时也不知道)。因此,请考虑一种方法来递归地实现它,而不使用for循环!递归是更多的思考,但只有4行代码。但如果你自己想办法的话会更有帮助。

Chris Doyle
Reply   •   3 楼
Chris Doyle    5 年前

因此,在递归解决方案中,您不使用for循环,而是使用函数式编程模型,即使用堆栈作为循环

def recur_factorial(n):
    total = 1
    if n > 1:
        total = n * recur_factorial(n - 1)
    print(total)
    return total


recur_factorial(5)

1
2
6
24
120

希望这能给你一个更好的想法,如果你的需求改变了,你可以调整这个模型来实现你所需要的。

更新

刚刚在你的评论中意识到你说函数需要返回 list 从2到n的阶乘。下面是更新的代码,返回一个列表。

def recur_factorial(n, factorials=[]):
    if n == 1:
        factorials.append(1)
    else:
        total = n * recur_factorial(n - 1)[-1]
        factorials.append(total)
    return factorials

factorials = recur_factorial(10)
print(factorials)

输出

[2, 6, 24, 120, 720, 5040, 40320, 362880, 3628800]