C语言中的递归函数是一种特殊的函数,它可以调用自身,从而实现一些复杂的功能。递归函数可以用来解决一些复杂的问题,比如求阶乘、斐波那契数列等。
递归函数有两个重要的特性:基本情况和递归情况。基本情况是指在函数中定义一个或多个基本情况,这些基本情况不会导致函数的递归调用,而是直接返回结果。而递归情况则是指在函数中定义一个或多个递归情况,这些递归情况会导致函数的递归调用。
int factorial(int n) { if (n == 0) // 基本情况 return 1; return n * factorial(n - 1); // 递归情况 }
C++函数可以调用自身。
这种行为称为递归。
#include <iostream>
using namespace std;
void countdown(int n);
int main(){
countdown(4); // call the recursive function
return 0;
}
void countdown(int n){
cout << "Counting down ... " << n << endl;
if (n > 0)
countdown(n-1); // function calls itself
cout << n << "n";
}
上面的代码生成以下结果。
演示递归函数阶乘。
#include <iostream>
#include <iomanip>
using namespace std;
unsigned long factorial( unsigned long ); // function prototype
int main()
{
// calculate the factorials of 0 through 10
for ( int counter = 0; counter <= 10; ++counter )
cout << setw( 2 ) << counter << "! = " << factorial( counter )
<< endl;
} // end main
// recursive definition of function factorial
unsigned long factorial( unsigned long number )
{
if ( number <= 1 ) // test for base case
return 1; // base cases: 0! = 1 and 1! = 1
else // recursion step
return number * factorial( number - 1 );
}
上面的代码生成以下结果。
// Testing the recursive fibonacci function.
#include <iostream>
using namespace std;
unsigned long fibonacci( unsigned long ); // function prototype
int main()
{
// calculate the fibonacci values of 0 through 10
for ( int counter = 0; counter <= 10; ++counter )
cout << "fibonacci( " << counter << " ) = "
<< fibonacci( counter ) << endl;
// display higher fibonacci values
cout << "fibonacci( 20 ) = " << fibonacci( 20 ) << endl;
cout << "fibonacci( 30 ) = " << fibonacci( 30 ) << endl;
cout << "fibonacci( 35 ) = " << fibonacci( 35 ) << endl;
} // end main
// recursive function fibonacci
unsigned long fibonacci( unsigned long number )
{
if ( ( number == 0 ) || ( number == 1 ) ) // base cases
return number;
else // recursion step
return fibonacci( number - 1 ) + fibonacci( number - 2 );
}
上面的代码生成以下结果。
测试迭代阶乘函数。
#include <iostream>
#include <iomanip>
using namespace std;
unsigned long factorial( unsigned long ); // function prototype
int main()
{
// calculate the factorials of 0 through 10
for ( int counter = 0; counter <= 10; ++counter )
cout << setw( 2 ) << counter << "! = " << factorial( counter )
<< endl;
} // end main
// iterative function factorial
unsigned long factorial( unsigned long number )
{
unsigned long result = 1;
// iterative factorial calculation
for ( unsigned long i = number; i >= 1; --i )
result *= i;
return result;
}
上面的代码生成以下结果。
C++ 条件运算符 ? : C++ 运算符Exp1 ? Exp2 : Exp3;其中,Exp1、Exp2 和 Exp3 是表达式。请注意冒号的使用和位置。? : 表达式的...
C++ 内联函数C++ 类对象在C++中我们通常定义以下函数来求两个整数的最大值:int max(int a, int b){return ab ? a : b;}但是这样...
C++ Null 指针 C++ 指针在变量声明的时候,如果没有确切的地址可以赋值,为指针变量赋一个 NULL 值是一个良好的编程习惯。赋为 N...
C 库函数 - putc() C 标准库 - stdio.h描述C 库函数 int putc(int char, FILE *stream) 把参数 char 指定的字符(一个无符号字符...
C 库函数 - perror() C 标准库 - stdio.h描述C 库函数 void perror(const char *str) 把一个描述性错误消息输出到标准错误 stder...