📜  Python中的递归

📅  最后修改于: 2022-05-13 01:55:05.940000             🧑  作者: Mango

Python中的递归

递归一词可以定义为根据自身定义事物的过程。简单来说,就是一个函数直接或间接调用自身的过程。

图像

使用递归的优点

  • 一个复杂的函数可以利用递归分解成更小的子问题。
  • 通过递归创建序列比使用任何嵌套迭代更简单。
  • 递归函数使代码看起来简单而有效。

使用递归的缺点

  • 递归调用会占用大量内存和时间,这使得它的使用成本很高。
  • 递归函数很难调试。
  • 递归背后的推理有时很难思考。

句法:

def func(): Example 1:A Fibonacci sequence is the integer sequence of 0, 1, 1, 2, 3, 5, 8....# Program to print the fibonacci series upto n_terms  # Recursive functiondef recursive_fibonacci(n):   if n <= 1:       return n   else:       return(recursive_fibonacci(n-1) + recursive_fibonacci(n-2))   n_terms = 10   # check if the number of terms is validif n_terms <= 0:   print("Invalid input ! Please input a positive value")else:   print("Fibonacci series:")   for i in range(n_terms):       print(recursive_fibonacci(i))Output:
Fibonacci series:
0
1
1
2
3
5
8
13
21
34
Example 2:The factorial of 6 is denoted as 6! = 1*2*3*4*5*6 = 720.# Program to print factorial of a number # recursively.  # Recursive functiondef recursive_factorial(n):     if n == 1:         return n     else:         return n * recursive_factorial(n-1)    # user inputnum = 6  # check if the input is valid or notif num < 0:     print("Invalid input ! Please enter a positive number.")  elif num == 0:     print("Factorial of number 0 is 1")  else:     print("Factorial of number", num, "=", recursive_factorial(num)) Output:Factorial of number 6 = 720What is Tail-Recursion?A unique type of recursion where the last procedure of a function is a recursive call. The recursion may be automated away by performing the request in the current stack frame and returning the output instead of generating a new stack frame. The tail-recursion may be optimized by the compiler which makes it better than non-tail recursive functions.Is it possible to optimize a program by making use of a tail-recursive function instead of non-tail recursive function?Considering the function given below in order to calculate the factorial of n, we can observe that the function looks like a tail-recursive at first but it is a non-tail-recursive function. If we observe closely, we can see that the value returned by Recur_facto(n-1) is used in Recur_facto(n), so the call to Recur_facto(n-1) is not the last thing done by Recur_facto(n).# Program to calculate factorial of a number# using a Non-Tail-Recursive function.   # non-tail recursive functiondef Recur_facto(n):         if (n == 0):         return 1        return n * Recur_facto(n-1)     # print the resultprint(Recur_facto(6))Output:720We can write the given function Recur_facto as a tail-recursive function. The idea is to use one more argument and in the second argument, we accommodate the value of the factorial. When n reaches 0, return the final value of the factorial of the desired number.# Program to calculate factorial of a number# using a Tail-Recursive function.  # A tail recursive function def Recur_facto(n, a = 1):         if (n == 0):         return a         return Recur_facto(n - 1, n * a)     # print the resultprint(Recur_facto(6))Output:720