java递归函数使例子,求和,计算1+2+3+4+…+50 的和

递归,是比较常用的算法之一;所谓递归,就是自己调用自己,但是递归不会无休止的执行,必须要有一个明确出口,当满足递归结束条件时递归程序就会停止运行,不然就会出现死循环;

python递归函数

先说一个简单的例子:求和,计算1+2+3+4+…+50 的和

什么是递归?

递归,就是在函数运行中自己调用自己
代码示例:

def recursion(n):  # 定义递归函数
    print(n)  # 打印n
    recursion(n+1)  # 在函数的运行种调用递归

recursion(1)  # 调用函数

这个函数在不断的自己调用自己,每次调用n+1,看下运行结果:

1
2
.....
998Traceback (most recent call last):
  File "D:/py_study/day08-函数/python递归函数md/01-什么是递归.py", line 11, in <module>
    recursion(1)
  File "D:/py_study/day08-函数/python递归函数md/01-什么是递归.py", line 9, in recursion
    recursion(n+1)
  File "D:/py_study/day08-函数/python递归函数md/01-什么是递归.py", line 9, in recursion
    recursion(n+1)
  File "D:/py_study/day08-函数/python递归函数md/01-什么是递归.py", line 9, in recursion
    recursion(n+1)
  [Previous line repeated 993 more times]
  File "D:/py_study/day08-函数/python递归函数md/01-什么是递归.py", line 8, in recursion
    print(n)
RecursionError: maximum recursion depth exceeded while calling a Python object

Process finished with exit code 1

可为什么执行了900多次就报错了呢?还说超过了最大递归深度限制,为什么要限制呢?

通俗来讲,是因为每个函数在调用自己的时候,还没有退出,占内存,多了肯定会导致内存崩溃.

本质上来将,在计算机中,函数调用是通过栈(stack)这样数据结构实现的,每当进入一个函数调用,栈就会加一层栈帧,每当函数返回,栈就会少一层栈帧.由于栈的大小不是无限的,所以,递归调用次数多了,会导致栈溢出.

我们还可以修改递归深度,代码如下:

import sys
sys.setrecursionlimit(1500)  # 修改递归调用深度

def cacl(n):
    print(n)
    cacl(n+1)

cacl(1)

澳门新葡亰手机版,运行结果如下:

1
2
......
1498Traceback (most recent call last):
  File "D:/py_study/day08-函数/python递归函数md/02-修改递归深度.py", line 11, in cacl
    cacl(n+1)
  File "D:/py_study/day08-函数/python递归函数md/02-修改递归深度.py", line 11, in cacl
    cacl(n+1)
  File "D:/py_study/day08-函数/python递归函数md/02-修改递归深度.py", line 11, in cacl
    cacl(n+1)
  [Previous line repeated 995 more times]
  File "D:/py_study/day08-函数/python递归函数md/02-修改递归深度.py", line 10, in cacl
    print(n)
RecursionError: maximum recursion depth exceeded while calling a Python object
public static void main(String[] args) { int num = sum(50); System.out.println(num); //输出结果:1275} //递归求和(1+2+3+4+...+50)public static int sum(int num) { if (num0) return num+sum(num-1); //调用递归方法 else return 0; //当num==0时递归结束(递归出口) // 电脑技术网 }

让我们以最经典的例子说明递归

# 计算n!  # 相信很多人都学过阶乘,比如5! = 5*4*3*2*1 n! = n*(n-1)*(n-2)*...*1,那么在递归中该如何实现呢?

# 1.打好函数的框架
def factorial(n):  # 定义一个计算阶乘的函数
    pass  # 不做任何操作

factorial(3)  # 调用

# 2.考虑两种情况,如果n=1,那么1的阶乘就是1了,如果这个传递的参数大于1,那么就需要计算继承了.
def factorial(n):
    if n == 1:  # 判断如果传递的参数是1的情况
        return 1  # 返回1,return代表程序的终止

res = factorial(1)  # res变量来接受函数的返回值
print(res)  # 打印

2.1如果传递的参数不是1,怎么做?
def factorial(n):
    if n == 1:
        return 1
    else:
        # 5*4! = 5*4*3! = 5*4*3*2! 
        return n * factorial(n-1)  # 传递的参数是n,那么再次调用factorial(n-1)
res = factorial(1)
print(res)