C语言基础(14)-递归
一. 递归的定义
函数可以调用自己,这就叫函数的递归。
先序递归和后序递归
#include <stdio.h> void test(int n); void test1(int n); void main() { int a = 10; test1(a); system("pause"); } void test(int n) { if (n > 0){ // 递归终止条件,递归一定要有终止条件 printf("n=%d\n",n); // 先序递归 输出结果:10 9 8 7 6 5 4 3 2 1 test1(n-1); } } void test1(int n) { if (n > 0) { test1(n-1); printf("n=%d\n",n); // 后序递归 输出结果:1 2 3 4 5 6 7 8 9 10 } }
例1:求第n个人的岁数
有n个人排成一队,问第n个人多少岁,他回答比前面一个人大2岁,再问前面一个人多少岁,他回答比前面一个人大2岁,一直问到最后问第一个人,他回答10岁
#include <stdio.h> int getAge(int n); void main() { int a = 8; printf("第%d个人的岁数是:%d\n",a,getAge(a)); system("pause"); } int getAge(int n) { int age; if (n == 1) { age = 10; } else{ age = getAge(n - 1) + 2; } return age; }
例2:将十进制数转化为二进制数
#include <stdio.h> int getBinary(int n); void main() { int a = 5; getBinary(a); system("pause"); } //将十进制数转换为二进制数 int getBinary(int n) { int i = n % 2; if (n >= 2) { getBinary(n / 2); } printf("%d",i); }
例3:斐波那契数列
#include <stdio.h> int fib(int n); void main() { for (int i = 0; i < 11; i++) { printf("第%d项的值为%d\n", i, fib(i)); } system("pause"); } // 斐波那契数列 int fib(int n) { if (n == 0) return 0; if (n == 1) return 1; if (n > 1) return fib(n - 1) + fib(n - 2); }
例4:计算一个字符串的长度
#include <stdio.h> int mystrlen(const char *p, int n); void main() { char *a = "hello123"; printf("当前字符串的长度为:%d\n",mystrlen(a,0)); system("pause"); } int mystrlen(const char *p, int n) { if (p[n]) { // 这里判断是否到达字符串末尾的0 return mystrlen(p,n+1); }else { return n; } }
例5:求n个自然数的和
// 求n个自然数的和 int mysum(int n) { if (n == 0) { // 递归终止条件 return 0; } return mysum(n - 1) + n; }