1.接收一个整型值(无符号),按照顺序打印它的每一位
#include<stdio.h>
//接受一个整型值(无符号),按照顺序打印它的每一位
//例如:
//输入:1234 ,输出:1 2 3 4
//%d 是打印有符号的整数(会有正负数)
//%u 是打印无符号的整数
//输入12345 打印: 5 4 3 2 1
int main() {
unsigned int num = 0;
scanf("%u", &num);//1234
//printf("%u\n",num);
while (num) {
printf("%d ", num % 10);//输入:123456 输出:6 5 4 3 2 1
num = num / 10;
}
return 0;
}
2.真正递归实现(接收一个整型值(无符号),按照顺序打印它的每一位)
#include<stdio.h>
//真正的递归实现
//递归函数
void print(unsigned int n) {
if (n>9)//没有这个条件可能会栈溢出
{
print(n / 10);//123
}
printf("%d ", n % 10);//4
}
int main() {
unsigned int num = 0;
scanf("%u", &num);//1234
print(num);//接收一个整型值(无符号),按照顺序打印它的每一位
return 0;
}
3.求字符串的长度
#include<stdio.h>
//求字符串的长度
#include<string.h>
int main() {
int len = strlen("abc");
printf("%d\n", len);
}
4.编写函数时不允许创建临时变量,求字符串的长度
#include<stdio.h>
//编写函数时不允许创建临时变量,求字符串的长度
//模拟实现strlen
#include<string.h>
//int my_strlen(char str[])//参数部分写出数组的形式
////一:创建了临时变量求解
//int my_strlen(char* str) {//参数部分写出指针的形式(本质和上述代码相同)
// int count = 0;//计数,临时变量
// while (*str!='\0') {
// count++;
// str++;//指针移动,找下一个字符
// }
// return count;
//}
//二:递归求解
//my_strlen("abc");
//1+my_strlen("bc");
//1+1+my_strlen("c");
//1+1+1+my_strlen("");
//1+1+1+0
int my_strlen(char* str) {
if (*str != '\0') {
return 1 + my_strlen(str + 1);//注意此处不能改为str++,因为这是后置++
}
else
{
return 0;
}
}
int main() {
char arr[] = "abc";//[a b c \0]
//char*
//int len = my_strlen("abc");//传递的也是首地址
int len = my_strlen(arr);
printf("%d\n", len);
}
5.递归求n的阶乘
#include<stdio.h>
//递归与迭代
//递归求n的阶乘
//int fac(int n) {
// if (n<1)
// {
// return 1;
// }
// else {
// return n * fac(n - 1);
// }
//}
//循环(迭代)求n的阶乘
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("ret = %d\n", ret);
return 0;
}
6.求第n个斐波那契数
#include<stdio.h>
//求第n个斐波那契数
//斐波那契数列
//1 1 2 3 5 8 13.....
//int Fib(int n) {
// if (n<=2)
// {
// return 1;
// }
// else
// {
// return Fib(n - 1) + Fib(n - 2);
// }
//}
////40
////39 38
////38 37 37 36
////37 36 36 35 36 35 35 34
////用递归存在大量重复的计算
//用非递归方式解决斐波那契数列
int Fib(int n) {
int a = 1;
int b = 1;
int c = 0;
while (n >= 3) {
c = a +b;
a = b;
b = c;
n--;
}
return c;
}
int main() {
int n = 0;
scanf("%d", &n);
int ret = Fib(n);
printf("ret = %d\n", ret);
}