1.递归和非递归分别实现求第n个斐波那契数。
//用递归求斐波那锲数
int fib(int num) {
if (num <= 2) {
return 1;
}
else
return fib(num - 1) + fib(num - 2);
}
//用非递归求斐波那锲数
int fibona(int num) {
int first = 1;
int second = 1;
int sum ;
if (num <= 2) {
return 1;
}
for (int i = 3; i <= num; ++i) {
sum = first + second;
first = second;
second = sum;
}
return sum;
}
2.编写一个函数实现n^k,使用递归实现
int Exponential(int n,int k) {
if (k <= 0) {
return 1;
}
return n * Exponential(n,k-1);
}
- 写一个递归函数DigitSum(n),输入一个非负整数,返回组成它的数字之和,
例如,调用DigitSum(1729),则应该返回1+7+2+9,它的和是19
int DigitSum(int number) {
if (number < 10) {
return number;
}
return DigitSum(number/10) + number % 10;
}
- 编写一个函数 reverse_string(char * string)(递归实现)
实现:将参数字符串中的字符反向排列。
要求:不能使用C函数库中的字符串操作函数。
char reverse_string(char* string) {
if (*string != '\0') {
reverse_string(string + 1);
}
printf("%c",*(string - 1));
}
5.递归和非递归分别实现strlen
//用非递归的方式计算字符串的长度
char CalculateStrlen(char* str) {
int count = 0;
while (1) {
if (*str != '\0') {
++str;
++count;
}
else
break;
}
++count;
return count;
}
//用递归的方式计算字符串的长度
char CalStr(char* str) {
int count = 1;
if (*str != '\0') {
return count + CalStr(str + 1);
}
return 1;
}
6.递归和非递归分别实现求n的阶乘
int factorial(int n) {
if (n <= 1) {
return 1;
}
return n * factorial(n - 1);
}
//用非递归求阶乘
int fact(int count) {
int result = 1;
for (int i = 1; i <= count; ++i) {
result *= i;
}
return result;
}
7.递归方式实现打印一个整数的每一位
int Print(int integer) {
if (integer > 9) {
Print(integer / 10);
}
printf("%d ", integer % 10);
}
main 函数如下:
int main() {
printf("请输入需要计算第几个斐波那锲数:");
int num = 0;
scanf("%d", &num);
printf("%d ", fibona(num));
printf("%d ", fib(num));
printf("\n请输入需要计算的数(n的k次方):");
int n = 0, k = 0;
scanf("%d %d", &n, &k);
printf("%d ", Exponential(n,k));
printf("\n请输入需要计算的数(n的各个位数相加):");
int number = 0;
scanf("%d", &number);
printf("%d ", DigitSum(number));
printf("\n请输入需要计算的数(逆序输出字符串):");
char ch[] = "";
scanf("%s", &ch);
reverse_string(ch);
printf("\n请输入需要计算的数(n的阶乘):");
int m = 0;
scanf("%d", &m);
printf("%d ",factorial(m));
printf("%d ", fact(m));
printf("\n请输入需要计算的数(打印一个整数的每一位):");
int integer = 0;
scanf("%d", &integer);
Print(integer);
printf("\n请输入需要计算的数(打印字符串的长度):");
char arr[] = "";
scanf("%s", &arr);
printf("%d ", CalculateStrlen(arr));
printf("%d ",CalStr(arr));
system("pause");
return 0;
}