1.1 斐波那契数列递归实现(会产生非常多的重复计算)
int fib(int n) {
if (n <= 2) {
return 1;
}
else {
return fib(n - 1) + fib(n - 2);
}
}
int main() {
int n = 0;
scanf("%d", &n);
printf("%d",fib(n));
}
1.2 斐波那契数列非递归实现(效率高)
1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233,377,610,987…
//规律——除了第一个第二个,其他的数都是通过前面两个数相加得到的结果
int fib(int n) {
int first = 1;
int second = 1;
int third = 1;
if (n <= 2) {
return n;
}
while (n-2) {
third = first + second;
first = second;
second = third;
n--;//必须加
}
return third;
}
int main() {
int n = 0;
scanf("%d", &n);
printf("%d",fib(n));
}
2.1 编写一个函数实现n的k次方递归实现。
需要区分三种情况>0,=0,<0
float my_pow(int n, int k) {
if (k == 0) {
return 1;
}
else if (k > 0) {
return n * my_pow(n, k - 1);
}
else if (k < 0) {
return 1.0/my_pow(n, -k);
//这里巧妙的将<0的运算转换为了>0运算
}
}
int main() {
int n = 0;
int k = 0;
scanf("%d %d", &n, &k);
float j=my_pow(n, k);
printf("%f", j);
}
2.2 编写一个函数实现n的k次方非递归实现。
float my_pow(int n, int k) {
if (k == 0) {
return 1;
}
else if (k > 0) {
float sum = 1;
for (int i = 0; i < k; i++) {
sum *= n;
}
return sum;
}
else if (k < 0) {
k = -k;//必须先取正,当成正数算,最后取倒数
float sum = 1;
for (int i = 0; i < k; i++) {
sum *= n;
}
return 1.0/sum;//两者想除得有一个小数
}
}
int main() {
int n = 0;
int k = 0;
scanf("%d %d", &n, &k);
float j=my_pow(n, k);
printf("%f", j);
}
3 写一个递归函数DigitSum(n),输入一个非负整数,返回组成它的数字之和
int DigitSum(int n) {
if (n > 9) {
return n % 10 + DigitSum(n / 10);
}
}
int main() {
int n = 0;
scanf("%d", &n);
printf("%d",DigitSum(n));
return 0;
}
3.1 求n的阶乘递归实现(不考虑溢出的问题)
int factorial(int n) {
if (n <= 1) {
return 1;
}
else {
return n * factorial(n - 1);
}
}
int main() {
int n = 0;
scanf("%d", &n);
printf("%d", factorial(n));//1*2*3*4*5*6*7*8*9
return 0;
}
3.2 求n的阶乘递归实现(不考虑溢出的问题)
int factorial(int n) {
int sum = 1;
for (int i = 1; i <= n; i++) {
sum *= i;
}
return sum;
}
int main() {
int n = 0;
scanf("%d", &n);
printf("%d",factorial(n));//1*2*3*4*5*6*7*8*9
return 0;
}
4 递归方式实现打印一个整数的每一位
void my_printf(int n) {
if (n > 9)//限制条件
my_printf(n / 10);//(n/10)使其逐渐接近(n>9)这个限制条件
printf("%d ", n % 10);
}
int main() {
int n = 0;
scanf("%d", &n);
my_printf(n);
return 0;