目录
💕1)
💕2)
❤️3.习题介绍
1.什么是函数递归
1)递归定义
2)递归主要思考方式(把大事化小)
3)递归的优点
2.递归的两个必要条件
1)
2)
3.习题介绍
1) 打印一个整数的每一位 (递归实现)
题目:输入1234 输出 1 2 3 4
代码如下:
#include <stdio.h>
void print(int n)
{
if (n > 9) //大于9是因为1/10 为0 条件为假 就不进if中
{
print(n / 10);
}
printf("%d ", n % 10);
}
int main()
{
int n = 0;
scanf("%d", &n);
print(n);
return 0;
}
运行结果
2)求n的阶乘 (递归实现)
首先我们要知道n的阶层怎么算,例如: 5!
代码如下
#include <stdio.h>
int stratum(int n)
{
if (n <= 2) // 因为1和2 的阶层就是本身
return n;
else
return n * stratum(n - 1);
}
int main()
{
int n = 0;
scanf("%d", &n);
int ret = stratum(n);
printf("%d\n", ret);
return 0;
}
运行结果
3) 字符串逆序 (递归实现)
代码如下:
#include <stdio.h>
void reverse_string(char* p)
{
if (*p != '\0')
{
reverse_string(p + 1); // p+1 是让指针与下一个值比较
}
printf("%c ", *p);
}
int main()
{
char arr[] = "abcdef";
reverse_string(arr);
return 0;
}
运行结果:
4) 计算一个数的每位之和 (递归实现)
代码如下:
#include <stdio.h>
int DigitSum(int n)
{
while (n > 9)
{
return n % 10 + DigitSum(n / 10); //这里就是以此记录每个取模结果,相加返回就行
}
}
int main()
{
int n = 0;
scanf("%d", &n);
int ret = DigitSum(n);
printf("%d\n", ret);
return 0;
}
运行结果:
5) k的n次方 (递归实现)
既然k的n次方知道是n个k相乘,不如就
代码如下:
#inluce <stdio.h>
int power(int k, int n)
{
while (n > 0)
{
return k * power(k,n - 1);
}
}
int main()
{
int n = 0;
int k = 0;
scanf("%d%d", &k, &n);
int ret = power(k,n);
printf("%d\n", ret);
return 0;
}
运行结果: