C 语言递归类型

17 Mar 2025 | 5 分钟阅读

本节将讨论C编程语言中不同类型的递归。递归是一个函数调用自身多达n次的过程。如果一个程序允许用户在同一函数内递归地调用一个函数,这个过程就称为函数的递归调用。此外,一个递归函数可以在同一个程序中直接或间接地调用自己。

递归函数的语法

在上面的语法中,main() 函数只调用一次递归函数。之后,递归函数会根据定义的条件调用自身,如果用户没有定义条件,它会无限次地调用同一函数。

Types of Recursion in C

不同类型的递归

以下是C编程语言中递归的类型:

  1. 直接递归
  2. 间接递归
  3. 尾递归
  4. 非尾/头递归
  5. 线性递归
  6. 树递归

直接递归

当一个函数在同一个函数内重复调用自己时,这被称为直接递归。

直接递归的结构

在上面的直接递归结构中,外部的 fun() 函数递归地调用内部的 fun() 函数,这种类型的递归被称为直接递归。

让我们编写一个程序来演示C编程语言中的直接递归。

Program2.c

输出

0	1	1	2	3	5	8	13	21	34 

间接递归

当一个函数被另一个函数以循环方式相互调用时,该函数被称为间接递归函数。

间接递归的结构

在这个结构中,有四个函数:fun1()、fun2()、fun3()和fun4()。当fun1()函数执行时,它会调用fun2()来执行。然后,fun2()函数开始执行并调用fun3()函数。通过这种方式,每个函数都会引导到另一个函数,使它们的执行形成一个循环。这种方法被称为间接递归。

让我们编写一个程序来演示C编程语言中的间接递归。

Program3.c

输出

2  1  4  3  6  5  8  7  10  9

尾递归

如果一个函数进行递归调用,并且该递归调用是函数执行的最后一条语句,那么这个递归函数就称为尾递归。之后,没有其他函数或语句需要调用该递归函数。

让我们编写一个程序来演示C编程语言中的尾递归。

Program4.c

输出

Number is: 7
 Number is: 6
 Number is: 5
 Number is: 4
 Number is: 3
 Number is: 2
 Number is: 1

非尾/头递归

如果一个函数进行递归调用,并且该递归调用是函数中的第一条语句,那么这个函数就称为非尾递归或头递归。这意味着在递归调用之前不应有任何语句或操作。此外,头递归在递归调用时不执行任何操作,所有操作都在返回时完成。

让我们编写一个程序来演示C编程语言中的头/非尾递归。

Program5.c

输出

Use of Non-Tail/Head Recursive function
 1 2 3 4 5

线性递归

如果一个函数在每次运行时只对自己进行一次调用,并且其增长与问题的大小成线性比例,那么这个函数就称为线性递归。

让我们编写一个程序来演示C编程语言中的线性递归。

Program6.c

输出

The maximum number is: 35

树递归

如果一个函数在递归函数内部对自己进行一次以上的调用,那么这个函数就称为树形递归。

让我们编写一个程序来演示C编程语言中的树形递归。

Program7.c

输出

Use of Tree Recursion:
 The Fibonacci number is: 13