1.编写一个函数实现n^k,使用递归实现
2. 写一个递归函数DigitSum(n),输入一个非负整数,返回组成它的数字之和,例如,调用DigitSum(1729),则应该返回1+7+2+9,它的和是19
3. 编写一个函数reverse_string(char * string)(递归实现)
实现:将参数字符串中的字符反向排列。
要求:不能使用C函数库中
的字符串操作函数。
4.不创建临时变量求字符串长度。
5.递归和非递归实现求n的阶乘
6.递归和非递归实现求第n个斐波那契数。
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
//1.编写一个函数实现n^k,使用递归实现
//int power(int n,int k)
//{
// if (k == 0)
// {
// return 1;
// }
// else
// {
// return n*power(n, k - 1);
// }
//}
//
//void main()
//{
// int n = 0;
// int k = 0;
// scanf("%d%d", &n,&k);
// printf("%d^%d=%d\n",n,k,power(n,k));
//}
//2. 写一个递归函数DigitSum(n),输入一个非负整数,返回组成它的数字之和
//例如,调用DigitSum(1729),则应该返回1 + 7 + 2 + 9,它的和是19
//int DigitSum(int n)
//{
// if (n > 9)
// {
// printf("%d+", n % 10);
// return n % 10 + DigitSum(n / 10);
// }
// else
// {
// printf("%d=",n);
// return n;
// }
////}
//void main()
//{
// int n = 1729;
// scanf("%d", &n);
// printf("%d",DigitSum(n));
//}
//3. 编写一个函数reverse_string(char * string)(递归实现) 实现:将参数字符串中的字符反向排列。
//要求:不能使用C函数库中的字符串操作函数。
//void reverse_string(char * string)
//{
// if (*string == '\0')
// {
// printf("%c",*string);
// }
// else
// {
// reverse_string(++string);
// printf("%c", *(--string));
// }
//}
//
//void main()
//{
// char *p = "adcd";
// reverse_string(p);
//}
//4.不创建临时变量求字符串长度。
//int len(char* p)
//{
// if (*p == '\0')
// {
// return 0;
// }
// else
// {
// return len(p + 1) + 1;
// }
//}
//
//void main()
//{
// int *p = "abcd";
// printf("%d", len(p));
//}
//5.递归和非递归实现求n的阶乘
//递归
//int Factorial(int n)
//{
// if (n > 0)
// {
// return n*Factorial(n - 1);
// }
// else
// {
// return 1;
// }
//}
//
//void main()
//{
// int n = 0;
// scanf("%d", &n);
// printf("%d!=%d\n",n,Factorial(n));
//}
//非递归
//int F_Factorial(int n)
//{
// int sum = 1;
// while (n > 1)
// {
// sum = sum*n;
// --n;
// }
// return sum;
//}
//void main()
//{
// int n = 0;
// scanf("%d", &n);
// printf("%d", F_Factorial(n));
//}
//6.递归和非递归实现求第n个斐波那契数。
#include<assert.h>
//递归
int Fibonacci(int n)
{
assert(n);
if (n < 3)
{
return 1;
}
else
{
return Fibonacci(n - 1) + Fibonacci(n - 2);
}
}
//非递归
void F_Fibonacci(int n)
{
int k1 = 1;
int k2 = 1;
int k3 = 0;
assert(n);
if (n > 2)
{
n = n - 2;
while (n > 0)
{
k3 = k1 + k2;
k1 = k2;
k2 = k3;
--n;
}
printf("%d\n", k3);
}
else
{
printf("1\n");
}
}
void main()
{
int n = 0;
scanf("%d", &n);
printf("%d\n", Fibonacci(n));
F_Fibonacci(n);
}
2255

被折叠的 条评论
为什么被折叠?



