1.接受一个整型值(无符号),按照顺序打印它的每一位。
- #include
- void print(int n)
- {
- if (n > 9)
- {
- print(n/10);
- }
- printf("%d ", n % 10);
- }
- int main()
- {
- int num = 1234;
- print(num);
- return 0;
- }
- //递归法
- //1234----(123)+4---(12)+3--(1)+2
- void Print(unsigned int n)
- {
- if (n > 9)
- {
- Print(n/10);
- }
- printf("%d ", n % 10);
- }
-
- int main()
- {
- Print(1234);
- }
2.编写函数创建临时变不允许量,求字符串的长度。
- #incude
- int Strlen(const char*str)
- {
- if(*str == '\0')
- return 0;
- else
- return 1+Strlen(str+1);//不包括\0
- }
- int main()
- {
- char *p = "abcdef";
- int len = Strlen(p);
- printf("%d\n", len);
- return 0;
- }
- int my_strlen(char* str)//传的是首地址
- {
- if (*str != '\0')
- return 1 + my_strlen(str + 1);
- else
- return 0;
- }
-
- int main()
- {
- char arr[] = "bit";
- //[b i t \0]
- //数组名其实是数组首元素的地址
- //
- int len = my_strlen(arr);
- printf("%d\n", len);
-
- return 0;
- }
-
- //my_strlen("bit")
- //my_strlen("it")+1
- //my_strlen("t")+1
3.n的阶乘
- #define _CRT_SECURE_NO_WARNINGS
-
- #include
- int Fac(int n)
- {
- if (n <= 1)
- return 1;
- else
- return n * Fac(n - 1);
- }
-
- int main()
- {
- int n = 0;
- scanf("%d", &n);
-
- int ret = Fac(n);
-
- printf("%d\n", ret);
-
- return 0;
- }
上述方法容易栈溢出,可以用循环
- int Fac(int n)
- {
- int i = 0;
- int ret = 1;
- for (i = 1; i <= n; i++)
- {
- ret *= i;
- }
- return ret;
- }
-
- int main()
- {
- int n = 0;
- scanf("%d", &n);
- int ret = Fac(n);
- printf("%d\n", ret);
- return 0;
- }
4.斐波那契数列
- int count = 0;
- int Fib(int n)
- {
- if (n == 3)//统计第3个斐波那契数被计算的次数
- count++;
-
- if (n <= 2)
- return 1;
- else
- return Fib(n - 1) + Fib(n - 2);
- }
-
- int main()
- {
- int n = 0;
- scanf("%d", &n);
- //写一个函数求第n个斐波那契数
- int ret = Fib(n);
- printf("%d\n", ret);
-
- return 0;
- }
- //循环
- int Fib(int n)
- {
- int a = 1;
- int b = 1;
- int c = 1;
- while (n>2)
- {
- c = a + b;
- a = b;
- b = c;
- n--;
- }
- return c
- }
- int main()
- {
- int n = 0;
- scanf("%d", &n);
- //写一个函数求第n个斐波那契数
- int ret = Fib(n);
- printf("%d\n", ret);
-
- return 0;
- }
5.递归实现n的k次方
- //编写一个函数实现n的k次方,使用递归实现
- double Pow(int n, int k)
- {
- if (k == 0)
- return 1.0;
- else if (k > 0)
- return n * Pow(n, k - 1);
- else
- return 1.0 / Pow(n, -k);
- }
-
- int main()
- {
- int n = 0;
- int k = 0;
- double ret = 0.0;
- scanf("%d %d", &n, &k);
- ret = Pow(n, k);
- printf("%lf\n", ret);
-
- return 0;
- }
6.计算一个数的每位之和(递归实现)
- //写一个递归函数DigitSum(n),输入一个非负整数,返回组成它的数字之和
- int DigitSum(int n)
- {
- if (n > 9)
- return DigitSum(n / 10) + n % 10;
- else
- return n;
- }
-
- int main()
- {
- int n = 0;
- scanf("%d", &n);
- int sum = DigitSum(n);
- printf("%d\n", sum);
-
- return 0;
- }
7.字符串逆序(递归实现)
- void reverse_string(char* str)
- {
- int l = 0;
- int r = strlen(str) - 1;
-
- while (l < r)
- {
- char tmp = *(str + l);
- *(str + l) = *(str + r);
- *(str + r) = tmp;
-
- l++;
- r--;
- }
- }
-
-
- int main()
- {
- char arr[] = "abcdef";//fedcba
- reverse_string(arr);//arr是数组名,数组名是数组首元素的地址
- printf("%s\n", arr);//fedcba
- return 0;
- }
8.顺序打印
- //递归法
- //1234----(123)+4---(12)+3--(1)+2
- void Print(unsigned int n)
- {
- if (n > 9)
- {
- Print(n / 10);
- }
- printf("%d ", n % 10);
- }
-
- int main()
- {
- Print(1234);
- }
9.小乐乐上课需要走n阶台阶,因为他腿比较长,所以每次可以选择走一阶或者走两阶,那么他一共有多少种走法?

- #include
-
- int Fib(int n)
- {
- if (n <= 2)
- {
- return n;
- }
- else
- {
- return Fib(n - 1) + Fib(n - 2);
- }
- }
- int main()
- {
- int n = 0;
- scanf("%d", &n);
- int ret = Fib(n);
- printf("%d", ret);
- return 0;
- }