将以下所有功能集合在main函数中
- 1.递归和非递归分别实现求第n个斐波那契数。
2.编写一个函数实现n^k,使用递归实现
-
写一个递归函数DigitSum(n),输入一个非负整数,返回组成它的数字之和,
例如,调用DigitSum(1729),则应该返回1+7+2+9,它的和是19 -
编写一个函数 reverse_string(char * string)(递归实现)
实现:将参数字符串中的字符反向排列。
要求:不能使用C函数库中的字符串操作函数。
5.递归和非递归分别实现strlen
6.递归和非递归分别实现求n的阶乘
7.递归方式实现打印一个整数的每一位
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<windows.h>
#include<string.h>
int fib1(int n) { //递归实现斐波那契数 默认10
if (n <= 2) {
return 1;
}
return fib1(n - 2) + fib1(n - 1);//递归过程
}
int fib2(int n) { //迭代实现输入斐波那契数,默认10
int frist = 1;
int second = 1;
int third = 1;
while (n > 2) { //迭代过程
n--;
third = frist + second;
frist = second;
second = third;
}
return third;
}
int mul(int n,int k) { //2.编写一个函数实现n^k,使用递归实现
for (int i = 1; i < k; i++) {
n *= n;
}
return n;
}
int ResolveNum(int n) { //3. 写一个递归函数DigitSum(n),输入一个非负整数,返回组成它的数字之和
static int s=0;
if (n >= 9) {
return n % 10 + ResolveNum(n / 10);
}
return n % 10;
}
int reverse_string(char string[],int len) { //4. 编写一个函数 reverse_string(char * string)(递归实现
int left = 0;
int right = len-1;
while (left < right) {
string[left] = string[left] ^ string[right];
string[right] = string[left] ^ string[right];
string[left] = string[left] ^ string[right];
right--;
left++;
}
return 0;
}
int MyStrlen(char arr[]) { //非递归实现strlen
int s = 0;
while (arr[s] != '\0') {
s++;
}
return s;
}
int MyStrlen2(char arr[]) {//5.递归分别实现strlen
if (arr[0] == '\0') {
return 0;
}
return 1+MyStrlen2(++arr);
}
int fac1(int n) { //6.递归和非递归分别实现求n的阶乘
if (1 == n) {
return 1;
}
return n * fac1(n - 1);
}
int fac2(int n) {
int s = 1;
for (int i = 1; i <= n; i++) {
s *= i;
}
return s;
}
int Myprintf(int n) {
if (n > 9) {
Myprintf(n / 10);
}
printf("%d ", n % 10);
return 0;
}
int main(){
//fib1(5);
begain:
printf("1.递归和非递归分别实现求第n个斐波那契数\n");
printf("2.编写一个函数实现n^k,使用递归实现 \n");
printf("3. 写一个递归函数DigitSum(n),输入一个非负整数,返回组成它的数字之和\n");
printf("4. 编写一个函数 reverse_string(char * string)(递归实现) \n");
printf(" 实现:将参数字符串中的字符反向排列。\n");
printf(" 要求:不能使用C函数库中的字符串操作函数。\n");
printf("5.递归和非递归分别实现strlen \n");
printf("6.递归和非递归分别实现求n的阶乘\n");
printf("7.递归方式实现打印一个整数的每一位\n");
printf("请输入选择的功能:");
int cs = 0;
scanf("%d", &cs);
switch (cs) {
case 1: { //1.递归和非递归分别实现求第n个斐波那契数
printf("请输入需要查询的序号:");
int n;
scanf("%d", &n);
printf("递归实现:%d\n", n);
printf("迭代实现:%d\n", n);
}
break;
case 2: { //2.编写一个函数实现n^k,使用递归实现
printf("请输入底数:");
int n;
scanf("%d", &n);
printf("请输入指数:");
int k;
scanf("%d", &k);
printf("%d^%d=%d\n", n, k, mul(n, k));
}
break;
case 3: { //3. 写一个递归函数DigitSum(n),输入一个非负整数,返回组成它的数字之和
printf("请输入一个数:");
int n = 0;
scanf("%d", &n);
printf("所得数字为:%d", ResolveNum(n));
}
break;
case 4: { //4. 编写一个函数 reverse_string(char * string)(递归实现)
// 实现:将参数字符串中的字符反向排列。
// 要求:不能使用C函数库中的字符串操作函数。
char arr[] = "abcdef";
int len=0;
while (arr[len] != '\0') {
len++;
}
reverse_string(arr, len);
printf("%s\n", arr);
}
break;
case 5: { // 5.递归和非递归分别实现strlen
char arr[] = "abcdefghtgfhfghfghfghfg";
printf("非递归strlen:%d \n", MyStrlen(arr));
printf("递归Mystrlen:%d \n", MyStrlen2(arr));
}
break;
case 6: { //6.递归和非递归分别实现求n的阶乘
printf("Please input a num:");
int n;
scanf("%d", &n);
printf("递归the result is :%d\n", fac1(n));
printf("非递归the result is :%d\n", fac2(n));
}
break;
case 7: { //7.递归方式实现打印一个整数的每一位
int n;
printf("Please input a num:");
scanf("%d", &n);
Myprintf(n);
}
break;
default: {
printf("###########输入错误,重新输入############");
goto begain; //重新输入
}
break;
}
system("pause");
}