一、递归函数
函数func()直接或间接调用函数本身,则该函数称为递归函数。递归函数不能定义为内联函数。在数学上,关于递归函数的定义如下:对于某一函数f(x),其定义域是集合A,那么若对于A集合中的某一个值X0,其函数值f(x0)由f(f(x0))决定,那么就称f(x)为递归函数。其实在c语言中,递归就是函数自己调用自己。
二、常见递归实例
1.求字符串的长度
代码如下:
#include
#include
#pragma warning (disable:4996) int strLen(char str[]); int main() {
/*求字符串长度*/ char str[] = "hello"; int n = strLen(str); printf("%d\n", n); system("pause"); return 0; } //求字符串长度(递归法) int strLen(char str[]) {
if (str[0] == '\0'){
return 0; } return 1 + strLen(str + 1); }
2.字符串的逆序显示
代码如下:
#include
#include
#pragma warning (disable:4996) int reverse_string(char *str); int main() {
/*输入字符串然后逆序输出*/ char str[100]; gets(str); reverse_tring(str); system("pause"); return 0; } //1.将字符串按反向排列输出(递归法) void reverse_tring(char *str) {
if (strlen(str)>0) {
printf("%c ", str[strlen(str) - 1]); str[strlen(str) - 1] = '\0'; reverse_tring(str); } } //2.简洁版--将字符串按反向排列输出(递归法) void reverse_String(char *str) {
if(*str) {
reverse_String(str+1); } printf("%c",*str); }
3.计算一个整数的各个位的和
代码如下:
#include
#include
#pragma warning (disable:4996) int DigitSum(int n); int main() {
/*计算一个数的各个位的和*/ int n = 3456; int ret = DigitSum(n); printf("%d", ret); system("pause"); } //实现一个数的各个位之和(递归法) int DigitSum(int n) {
if (n <= 9){
return n; } return n % 10 + DigitSum(n / 10); }
4.实现n的k次方
代码如下:
#include
#include
#pragma warning (disable:4996) int exp(int n, int k); int main() {
int n = 4,k = 4; int ret=exp(n, k); printf("%d\n", ret); system("pause"); } //实现n的k次方(递归法) int exp(int n, int k) {
if (k <= 1){
return n; } return n*exp(n, k - 1); }
5.计算第n的斐波那契数
代码如下:
#include
#include
#pragma warning (disable:4996) int fib(int n); int main() {
int n = 0; printf("请输入一个数:"); scanf("%d",&n); int ret=fib(n); printf("%d\n", ret); system("pause"); return 0; } //求斐波那契数列(递归法) int fib(int n) {
if (n == 1){
return 1; } if (n == 2){
return 1; } return fib(n-1)+ fib(n-2); }
三、总结
以上就是今天要讲的内容,本文仅仅简单介绍了最常用的用递归函数处理问题的一些算法,加深对递归思想的理解。也希望本文对各位老铁的学习有所帮助。
发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/199625.html原文链接:https://javaforall.net
