1、编写一个函数,实现输入数字如1234,能在屏幕上打印1 2 3 4的功能
void print(int n)
{
//思路:如何打印1、2、3、4四位数
/*
1234
123 4
12 3 4
1 2 3 4
*/
if(n>9)
{
print(n/10);//一直递归到首位,然后<9跳出递归,打印首位数字
}
printf("%d ",n%10);
}
int main()
{
int num = 0;
scanf("%d", &num);
print(num);
return 0;
}
2、编写一个函数,不允许创建局部变量,求字符串长度
//分析:1、字符串长度以'\0'结束
//2、字符串用数组存放,而数组传参不是传的整个数组元素,而是第一个元素的地址
int get_len(char* arr)
{
//arr指向的是字符串第一个字符b
if(*arr != '\0')
return 1+get_len(arr+1);
else
return 0;
}
int main()
{
char arr[] = "bit";
int length = get_len(arr);
printf("len=%d\n", length);
return 0;
}
3、求n的阶乘
//传统
int Fac(int n)
{
int i = 0;
int res = 1;
for(i=1; i<=n; i++)
{
res*=i;
}
return res;
}
//函数递归
int Fac2(int n)
{
int res = 0;
if(n>1)
return res = n*Fac2(n-1);
else
return 1;
}
int main()
{
int n = 0;
int res = 0;
scanf("%d", &n);
//res = Fac(n);
res = Fac2(n);
printf("%d\n", res);
return 0;
}
4、斐波那契数列
注:斐波那契数列用递归的方法增加计算时间,还造成了空间的浪费
而循环的方法反之
//斐波那契数列
//1 1 2 3 5 8 13 21 34 55……
//用递归的方法重复计算,大大降低计算效率
int Fib(int num)
{
if(num>2)
return Fib(num-1)+Fib(num-2);
else
return 1;
}
//用循环的方法提高计算速度
int Fib2(int num)
{
int a = 1;
int b = 1;
int c = 1;
while(num>2)
{
c = a+b;
a = b;
b = c;
num--;
}
return c;
}
int main()
{
int num = 0;
int res = 0;
scanf("%d", &num);
//res = Fib(num);
res = Fib2(num);
printf("%d\n", res);
return 0;
}