python递归函数是指一个函数从一个状态开始,然后返回另一个状态。递归函数是在实现过程中遇到的最基本的一类函数。比如, int i=0; int j=0; int c=1;等等都是一类递归函数,但是我们知道,它们在实现过程中需要执行多次,并且执行完第一次之后就不能再执行第二次了。为了解决这个问题,我们需要使用递归函数。
这里给大家讲一个很简单的例子:
这是一个非常简单的递归函数,但是我们要问问大家:为什么这个递归函数要在c里面写呢?而且我们的程序还要运行多次呢?
那么接下来,我们就一起来看一下:为什么要把程序运行多次呢?
首先,我们来看一下递归函数的定义:
递归函数是指:如果要想使用一个函数,那么我们就需要先定义这个函数,然后再调用它,最后才能返回。
在上面的例子中,我们输入两个数据,其中第一个数据是5-20-10;第二个数据是5-20-10。
如果我们直接调用5-20-10的递归函数,那么就会导致:
1.我们需要先定义一个5-20-10的递归函数(如: int i=0; int j=0; int c=1等等)
所以,在这个例子中,我们需要定义一个5-20-10的递归函数,然后再调用5-20-10的递归函数。
在上面的例子中,我们就是这样做的。那么,我们是怎么把这个递归函数写到c里面去了呢?下面我们就一起来看一下:
然后,我们再来看一下:
a=b;这是一个简单的递归函数,在这里我们要使用一个条件判断语句,以便于我们能够快速的找到它的正确返回值。
b=a;这是一个循环语句,可以用来判断A、B两个条件是否满足,即A+B=0;或者B+A=1,A和B两个条件是否满足。注意这里的“不满足”是指A和B两个条件不能同时满足,即A+B=1.
a+b;这是一个递归函数,我们要判断a、b是否等于2。当a=b时,判断结果为2.当a=1时,判断结果为1.
如果我们使用递归函数的话,那么我们就可以省去很多繁琐的步骤,在c里面就能完成。
我们来看一下:当a=b时,可以这样写:
这是一个简单的递归函数,我们只要写一个循环语句就可以了。如下:
很明显,我们看到这样的函数确实非常简单。那么我们再来看看:如果在c里面用递归函数来实现的话,这两个条件有没有可能同时满足呢?答案是肯定的。因为c里面也可以用递归函数。
比如这样的:
这是一个递归函数了吧?其实并不是,因为它其实可以用其他方法来实现的:
我们来看一下C语言里面的表达式运算符:
当a=b时,就可以直接使用表达式运算符来进行运算了。
接下来,我们再来看一下,如果我们在一个函数中执行多个操作,会出现什么情况?
这个时候,我们就可以使用递归函数了。然后,我们再把一个递归函数套入到另一个程序中,这样,我们就可以在另外一个程序中直接调用这个递归函数了。当然,对于递归函数来说,最重要的一点是,在调用了递归函数之后,我们应该把函数的参数传递给另一个函数。
还是以上面的例子为例,我们在最后一次调用递归函数的时候,把参数传递给了B。然后如果B在后面也调用了递归函数C呢?
在这里就会出现一个问题了:B是如何把参数传递给C呢?如果B不把参数传递给C,那B是不是就不会被调用了?显然是不会的。我们只要在递归函数的代码中加入一句话就可以了:
那么接下来,我们就来看一下这个递归函数的具体实现。在代码中,我们定义了一个 int a=0;参数a和参数b。然后需要注意的是:
接下来就是编译期的时候了,我们会发现:
实际上,这个递归函数并没有执行完。也就是说,当我们在调用完递归函数之后(这里就不需要调用B了),C还会再执行一遍递归函数A。也就是说,即使我们在递归函数中加入了一个参数a和参数b。但是因为两个参数并没有被传递到C里面去。所以最终,我们并没有改变递归函数A的输出结果。
另外一个问题就是:递归函数C在执行一次之后就不能再执行第二次了。因此当我们再次使用递归函数C时,C必须重新执行一遍递归函数A (代码中不需要调用B)。
那到底怎么去解决这个问题呢?很简单:你只需要把递归程序源码中的参数a和参数b替换成一个新的变量c就可以了。
这里是我的个人博客:代码实践。如果有什么疑问或者想了解更多 Python知识的朋友们可以随时关注我的博客: python编程实践
接下来,我们来看一下:
在上面的代码中,我们用 if语句判断是否为真,如果不是真就返回 true,并调用 printf ()函数。我们可以看到,这是一个循环,而我们在第一次执行的时候,都是需要调用 printf ()函数的。
但是下面这段代码却不一样。这段代码并没有调用 printf ()函数,而是在循环中调用了一次 printf ()函数。而这段代码是 python的标准操作流程:
先看一下:在第一次执行的时候,我们都是调用 printf ()函数,而 printf ()函数里面是这样写的:
我们可以看到上面的程序还没有结束,还有第三次循环。我们可以看到:第三次循环还是没有结束,而是在循环中又调用了一次 printf ()函数。这说明了什么呢?说明了 python中的递归调用是一种不可逆的调用。
那么上面这段程序为什么要在c里面写呢?原因很简单:因为要确保我们不会再调用其他的函数了。在C里面写的好处是我们可以随时停下来检查一下,这样可以避免发生一些错误。
然后,当我们想要返回一个函数的值时,程序中又会出现什么情况?
当我们想要返回一个函数的值时,我们需要先找到那个函数,然后再找相应的变量去引用。然而,在这个过程中,我们需要通过一个临时变量来保存引用。具体操作如下:
注意:我们在这里使用了临时变量来保存引用。
下面是一个简单的示例程序:
上面这段代码可以很好地展示出如何使用临时变量保存引用。如果大家不想自己手动去写函数,也可以使用 python内置的函数库—— tuple ()去调用,下面是一个简单的例子:
1. 计算阶乘
def factorial(n):
if n == 0:
return 1
else:
return n * factorial(n-1)
2. 斐波那契数列
def fibonacci(n):
if n == 0:
return 0
elif n == 1:
return 1
else:
return fibonacci(n-1) + fibonacci(n-2)
3. 汉诺塔
def hanoi(n, A, B, C):
if n == 1:
print(A, "->", C)
else:
hanoi(n-1, A, C, B)
print(A, "->", C)
hanoi(n-1, B, A, C)
4. 二分查找
def binary_search(arr, target, low, high):
if low > high:
return -1
mid = (low + high) // 2
if arr[mid] == target:
return mid
elif arr[mid] > target:
return binary_search(arr, target, low, mid-1)
else:
return binary_search(arr, target, mid+1, high)



















