知识点概括:
1.递归
2.const
函数递归:
在函数调用中,如果直接或间接地调用该函数本身,称为递归调用.递归调用有时也称为循环定义.
对于递归来说,必须要出口,也就是递归的结束标志,必须要有结束,否则就会形成死循环
return 后面啥都不写,代表返回值类型为空void
const
修饰变量,把变量当做常量来看待,只能读不能写
const 让程序安全
修饰谁,谁就不可变
const int *p = &a;
const修饰*p,不能通过指针变量p修改指向空间的内容,但是p可以重指向
int * const p2 = &a;
const 修饰p2, p2不可以重指向,但是可以通过p2修改指向空间的内容
const int * const p3 = &a;
修饰 p3 以及 *p3, p3不可以重指向,也不可以通过*p3修改指向空间的内容
void eatAppleXiaoMeng(int n) {
//对于递归来说,必须要出口,也就是递归的结束标志,必须要有结束,否则就会形成死循环
if (n == 0) {
return; //return 后面啥都不写,代表返回值类型为空void
}
n--; //留一个苹果
printf("小萌吃第%d个苹果\n", 4 - n); //吃了一个苹果
eatAppleXiaoMeng(n); //找自己吃苹果
}
//讲一个整数正序输出, 以及 逆序输出
//例子: 54321 正序:54321 逆序:12345
void zhengXu(int n) {
if (n == 0) {
return; //如果没有可挑选的数字,直接返回,递归结束
}
//.留一个数
int number = n % 10;
//2.找下一个人
zhengXu(n / 10);
//3.输出留的数
printf("%d", number);
}
void niXu(int n) {
if (n == 0) {
return;
}
int number = n % 10;
printf("%d",number);
niXu(n / 10);
}
//求阶乘,5!
int jieCheng(int n) {
if (n == 1) {
return 1; //如果求1的阶乘,直接返回1
}
int number = n;
int value = jieCheng(n - 1);
return number * value;
}
eatAppleXiaoMeng(4);
zhengXu(54321);
niXu(54321);
printf("%d", jieCheng(10));
//const
//const 修饰变量,把变量当做常量来看待,只能读不能写
const int b = 10;
b = 5;
//const 修饰谁,谁就不可变
int a = 10;
int b = 20;
const int *p = &a;
//const修饰*p,不能通过指针变量p修改指向空间的内容,但是p可以重指向
p = &b;
*p = b;
int const *p1 =&a;
//const修饰*p,不能通过指针变量p1修改指向空间的内容,但是p1可以重指向
int * const p2 = &a;
//const 修饰p2, p2不可以重指向,但是可以通过p2修改指向空间的内容
*p2 = b;
p2 = &b;
const int * const p3 = &a;
//const 修饰 p3 以及 *p3, p3不可以重指向,也不可以通过*p3修改指向空间的内容
//const 让程序安全
strlen(const char *)