提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
文章目录
- 前言
- 一、pandas是什么?
- 二、1、编写一个递归函数求出n的k次方
- 2、编写一个函数 reverse_string(char* string)(递归实现)
- 3、写一个递归函数DigitSum(n),输入一个非负整数,返回组成它的数字之和
例如,调用DigitSum(1729),则应该返回1 + 7 + 2 + 9,它的和是19 - 4、
- 总结
前言
递归函数代码简洁,但是思考较难,希望大家可以跟随我慢慢去学,如果有不懂得点,希望能提出来我为你们一一解答。
一、编写一个递归函数求出n的k次方
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
double fun1(int n,int k)
{
if (k > 0)
return n * fun1(n,k - 1);
else if (k== 0)
return 1;
else
return n * fun1(n,-k);
}
int main()
{
int n = 0;
int k = 0;
scanf("%d %d", &n, &k);
double ret=fun1(n, k);
printf("%lf", ret);
return 0;
}
由题意知:
不仅需要讨论K>0,还要讨论K<0以及K=0。
K<0是n的k次方会出现分数,则需要用double类型,用double类型的需要输出%lf。
二、编写一个函数 reverse_string(char* string)(递归实现)
要求:不能使用C函数库中的字符串操作函数。
比如 :char arr[] = "abcdef";
逆序之后数组的内容变成:fedcba
解法一:写成下标的形式
void reverse_string(char* str)
{
int len = strlen(str);
int left = 0;
int right = len - 1;
while (left < right)
{
int tmp = *(str + left);
*(str + left) = *(str + right);
*(str + right) = tmp;
left++;
right--;
}
}
int main()
{
char arr[] = "abcdef";
reverse_string(arr);
printf("%s\n", arr);
return 0;
}
解法二:写成指针的形式
void reverse_string(char* str)
{
int len = strlen(str);
char* left = str;
char* right = str + len - 1;
while (left < right)
{
int tmp = *left;
*left = *right;
*right = tmp;
left++;
right--;
}
}
int main()
{
char arr[] = "abcdef";
reverse_string(arr);
printf("%s\n", arr);
return 0;
}
用递归求解
#include <stdio.h>
#include <string.h>
int my_strlen(char*str)
{
int count = 0;
while (*str != '\0')
{
str++;
count++;
}
return count;
}
void reverse_string(char*str)
{
int len = my_strlen(str);
char tmp = *str;
*str = *(str + len - 1);
*(str + len - 1) = '\0';
if (*(str + 1) > 1)
reverse_string(str + 1);
*(str + len - 1) = tmp;
}
int main()
{
char arr[] = "abcdef";
reverse_string(arr);
printf("%s\n", arr);
return 0;
}
三.写一个递归函数DigitSum(n),输入一个非负整数,返回组成它的数字之和
例如,调用DigitSum(1729),则应该返回1 + 7 + 2 + 9,它的和是19
输入:1729,输出:19
代码如下:
int DigitSum(int n)
{
if (n < 10)
return n;
else
return DigitSum(n / 10) + n % 10;
}
int main()
{
int unsigned num = 0;
scanf("%d", &num);
DigitSum(num);
int ret = DigitSum(num);
printf("%d", ret);
return 0;
}
四.
小乐乐最近接触了求和符号Σ,他想计算
的结果。但是小乐乐很笨,请你帮助他解答。
输入描述:
输入一个正整数n (1 ≤ n ≤ 109)
输出描述:
输出一个值,为求和结果。
非递归法
代码如下(示例):
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
int main()
{
int n = 0;
scanf("%d", &n);
int i = 0;
long long sum = 0;
for (i = 1; i <= n; i++)
{
sum += i;
}
printf("%lld", sum);
return 0;
}
非递归法2(运用数学公式)
int main() { long long n = 0; long long sum = 0; scanf("%d", &n); sum = (1 + n) * n / 2; printf("%lld", sum); }
递归法
总结
提示:这里对文章进行总结:
例如:以上就是今天要讲的内容,本文仅仅简单介绍了pandas的使用,而pandas提供了大量能使我们快速便捷地处理数据的函数和方法。