Python 函数递归(1) 题解

Python 函数递归(1) 题解

题目

  • 使用函数递归的方式写出阶乘计算。

    # -*- coding: UTF-8 -*-
    
    # TODO(You): 请实现递归计算阶乘
    
    if __name__ == '__main__':
        print(fact(998))
    
  • 请选出下面的 Python 递归阶乘实现代码中,错误 的选项

  • 选项 A:

    def inner_fact(n, m, r):
        if m == n:
            return r
        return inner_fact(n, m+1, r*m)
    
    
    def fact(n):
        return inner_fact(n, 1, 1)
    
    '''
    以 fact(5) 进行分析
    调用:inner_fact(5, 1, 1)
      调用:inner_fact(5, 2, 1 * 1)
        调用:inner_fact(5, 3, 1 * 1 * 2)
          调用:inner_fact(5, 4, 1 * 1 * 2 * 3)
            调用:inner_fact(5, 5, 1 * 1 * 2 * 3 * 4),此时 m 等于 n,直接返回 r,即 1 * 1 * 2 * 3 * 4
    就它了,错的就是这个逼,应该改成:
    def inner_fact(n, m, r):
        if m == n:
            return r
        return inner_fact(n, m+1, r*(m+1))
    '''
    
  • 选项 B:

    def inner_fact(n, m):
        if m == n:
            return n
        return m*inner_fact(n, m+1)
    
    def fact(n):
        return inner_fact(n,1)
    
    '''
    以 fact(5) 进行分析
    调用:inner_fact(5, 1)
      调用:1 * inner_fact(5, 2)
        调用:1 * 2 * inner_fact(5, 3)
          调用:1 * 2 * 3 * inner_fact(5, 4)
            调用:1 * 2 * 3 * 4 * inner_fact(5, 5),此时 m 等于 n,直接返回 5,
            即 inner_fact(5, 5) 返回 5,最后返回 1 * 2 * 3 * 4 * 5,正确
    '''
    
  • 选项 C:

    def fact(n):
        if n == 1:
            return 1
        return n*fact(n-1)
    
    '''
    以 fact(5) 进行分析
    调用:fact(5)
      调用:5 * fact(4)
        调用:5 * 4 * fact(3)
          调用:5 * 4 * 3 * fact(2)
            调用:5 * 4 * 3 * 2 * fact(1),此时 n 等于 1,直接返回 1,
            即 fact(1) 返回 1,最后返回 5 * 4 * 3 * 2 * 1,正确
    '''
    
  • 选项 D:

    def inner_fact(n, r):
        if n == 1:
            return r
        return inner_fact(n-1, r*n)
    
    
    def fact(n):
        return inner_fact(n, 1)
    
    '''
    以 fact(5) 进行分析
    调用:inner_fact(5, 1)
      调用:inner_fact(4, 1 * 5)
        调用:inner_fact(3, 1 * 5 * 4)
          调用:inner_fact(2, 1 * 5 * 4 * 3)
            调用:inner_fact(1, 1 * 5 * 4 * 3 * 2), 此时 n 等于 1,直接返回 r
            即 1 * 5 * 4 * 3 * 2,正确
    '''
    

你可能感兴趣的:(CSDN,Python,入门技能树,python,前端,题解)