#include<stdio.h>
#include<windows.h>
//1.递归实现求第n个斐波那契数。
int fib1(int n)
{
if (n > 2)
return (fib1(n-1) + fib1(n - 2));
else
return 1;
}
//非递归实现求第n个斐波那契数。
int fib2(int n)
{
int prior_result = 1;
int result = 1;
int next_result;
while (n > 2)
{
n--;
next_result = prior_result;
prior_result = result;
result = prior_result + next_result;
}
return result;
}
//2.编写一个函数实现n^k,使用递归实现
int index(int n,int k)
{
if (k ==0)
{
return 1;
}
else if (k == 1)
{
return n;
}
else
{
return n * index(n, k-1);
}
}
//3. 写一个递归函数DigitSum(n),输入一个非负整数,返回组成它的数字之和.
int DigitSum(int n)
{
if (n < 10)
{
return n;
}
else
{
return (n % 10) + DigitSum(n / 10);
}
}
//4. 编写一个函数实现:将参数字符串中的字符反向排列。
void reverse_string(char * string)
{
if (*(++string) != '\0')
reverse_string(string );
printf("%c", *(string-1));
}
//5.递归实现strlen
int strlen1(char *string)
{
if (*string == '\0')
{
return 0;
}
else
{
return 1 + strlen1(++string);
}
}
//5.非递归实现strlen
int strlen2(char *string)
{
int i = 0;
while (*string != '\0')
{
++string;
++i;
}
return i;
}
//6.递归和非递归分别实现求n的阶乘
int Factorial1(int n)
{
if (n <=1)
return 1;
else
return n * Factorial1(n - 1);
}
int Factorial2(int n)
{
int result = 1;
while (n > 1)
{
result *= n;
n -= 1;
}
return result;
}
//7.递归方式实现打印一个整数的每一位
void print(int n)
{
if (n > 9)
{
print(n / 10);
}
printf("%d ", n%10);
}
int main()
{//1.递归和非递归分别实现求第a个斐波那契数。
printf("输出要求的第a个斐波那契数");
int a;
int result;
scanf("%d", &a);
result=fib1(a);
printf("结果为:%d\n", result);
result=fib2(a);
printf("结果为:%d\n", result);
//2.编写一个函数实现n^k,使用递归实现
int n;
int k;
printf("输入n和k求n^k\n");
scanf("%d", &n);
scanf("%d", &k);
result = index(n, k);
printf("结果为:%d\n",result);
//3. 写一个递归函数DigitSum(n),输入一个非负整数,返回组成它的数字之和.
int number;
printf("请输入一个数字求组成他的数字之和");
scanf("%d", &number);
printf("结果为: %d\n", DigitSum(number));
//4. 编写一个函数实现:将参数字符串中的字符反向排列。
char string []= "abcd";
reverse_string(string);
//5.递归和非递归分别实现strlen
char string1[] = "abcd";
printf("abcd字符长度为:%d\n", strlen1(string1));
printf("abcd字符长度为:%d\n", strlen2(string1));
//6.递归和非递归分别实现求n的阶乘
int number_1;
printf("请输入数字n求他的阶乘");
scanf("%d", &number_1);
printf("n的阶乘为:%d\n", Factorial1(number_1));
printf("n的阶乘为:%d\n", Factorial2(number_1));
//7.递归方式实现打印一个整数的每一位
int num ;
printf("请输入一个整数,输出他的每一位:");
scanf("%d", &num);
printf("结果为:");
print(num);
system("pause");
}