1.递归和非递归分别实现求第n个斐波那契数。
(1)非递归方法
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
int Fibonacci(int x)
{
int a = 1;
int b = 1;
int c = 0;
int i = 0;
if (x <= 2)
return 1;
else
{
for (i = 1; i <= x - 2; i++)
{
c = a + b;
a = b;
b = c;
}
}
return c;
}
int main()
{
int a;
int ret;
printf("查询第几个斐波那契数\n");
scanf("%d", &a);
ret = Fibonacci(a);
printf("%d\n", ret);
system("pause");
return 0;
}
(2)递归方法
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
int fibonacci(int x)
{
if (x <= 2)
return 1;
else
return fibonacci(x - 1) + fibonacci(x - 2);
}
int main()
{
int a;
int ret;
printf("查询第几个斐波那契数\n");
scanf("%d", &a);
ret = fibonacci(a);
printf("%d",ret);
system("pause");
return 0;
}
2.编写一个函数实现n^k,使用递归实现
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
int cheng_x(int x, int y)
{
if (y > 1)
return x*cheng_x(x,y-1);
else
return x;
}
int main()
{
int n = 0;
int k = 0;
int ret = 0;
printf("请输入n与k\n");
scanf("%d%d", &n, &k);
ret = cheng_x(n,k);
printf("%d", ret);
system("pause");
return 0;
}
- 写一个递归函数DigitSum(n),输入一个非负整数,返回组成它的数字之和,
例如,调用DigitSum(1729),则应该返回1+7+2+9,它的和是19
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
int add(int x)
{
if (x > 9)
return (x%10) + add(x / 10);
else
return x;
}
int main()
{
int num;
int ret;
printf("请输入一个数字\n");
scanf("%d", &num);
ret = add(num);
printf("%d\n", ret);
system("pause");
return 0;
}
- 编写一个函数 reverse_string(char * string)(递归实现)
实现:将参数字符串中的字符反向排列。
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
void reverse_string(char* p)
{
if (*(p + 1) != 0)
reverse_string(p + 1);
printf("%c ", *(p));
}
int main()
{
int i;
char arr[50] = { 0 };
printf("请输入字符串内容(50个字符以内)\n");
scanf("%s", arr);
reverse_string(arr);
system("pause");
return 0;
}
5.实现strlen函数
(1)非递归
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
int strlen(char *p)
{
int cont = 0;
while (*p != 0)
{
cont++;
p++;
}
return cont;
}
int main()
{
char arr[50] = { 0 };
int ret = 0;
printf("请输入字符串(50个以内)\n");
scanf("%s", arr);
ret = strlen(arr);
printf("%d个字符\n",ret);
system("pause");
return 0;
}
(2)递归
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
int strlen(char *p)
{
if (*p != 0)
return 1 + strlen(p+1);
else return 0;
}
int main()
{
char arr[50] = { 0 };
int ret = 0;
printf("请输入字符串(50个以内)\n");
scanf("%s", arr);
ret = strlen(arr);
printf("%d个字符\n", ret);
system("pause");
}
6.实现求n的阶乘
(1)非递归
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
int factorial(int n)
{
int i = 0;
int sum = 1;
for (i = 1; i <= n; i++)
{
sum *= i;
}
return sum;
}
int main()
{
int ft = 0;
int ret = 0;
printf("请输入要求的阶乘数:>");
scanf("%d", &ft);
ret = factorial(ft);
printf("%d! = %d\n", ft, ret);
system("pause");
return 0;
}
(2)递归
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
int factorial(int n)
{
if (n > 1)
return n * factorial(n - 1);
else
return 1;
}
int main()
{
int ft = 0;
int ret = 0;
printf("请输入要求的阶乘数:>");
scanf("%d", &ft);
ret = factorial(ft);
printf("%d! = %d\n", ft, ret);
system("pause");
return 0;
}
7.递归方式实现打印一个整数的每一位
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
void Print(int n)
{
if (n > 9)
Print(n / 10);
printf("%d ",n%10);
}
int main()
{
int num = 0;
printf("请输入一个数字\n");
scanf("%d", &num);
Print(num);
system("pause");
return 0;
}