1.递归和非递归分别实现求第n个斐波那契数。
递归:
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
int Fib(int n)
{
if (n == 1 || n == 2)
{
return 1;
}
return Fib(n - 1) + Fib(n - 2);
}
int main()
{
int n = 0;
printf("请输入您所要求的斐波那契数:");
scanf("%d",&n);
printf("斐波那契数为:%d\n",Fib(n));
system("pause");
return 0;
}
非递归:
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
int Fib(int n)
{
int a = 1;
int b = 1;
int fb = 2;
while (n>2)
{
fb = a + b;
a = b;
b = fb;
n--;
}
return fb;
}
int main()
{
int n = 0;
printf("请输入您所要求的斐波那契数:");
scanf("%d",&n);
printf("斐波那契数为:%d\n",Fib(n));
system("pause");
return 0;
}
2.编写一个函数实现n^k,使用递归实现
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
int P2(int n, int k)
{
if (k==1)
{
return n;
}
else
{
return n*P2(n, k - 1);
}
}
int main()
{
int n = 0, k = 0;
printf("请输入您所求数:");
scanf("%d %d",&n,&k);
printf("所得数为:%d\n",P2(n,k));
system("pause");
return 0;
}
3 写一个递归函数DigitSum(n),输入一个非负整数,返回组成它的数字之和,
例如,调用DigitSum(1729),则应该返回1+7+2+9,它的和是19
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
int DigitSum(int n)
{
if (n==0)
{
return 0;
}
else
{
return n % 10 + DigitSum(n / 10);
}
}
int main()
{
int n = 0;
printf("请输入您所求数:");
scanf("%d",&n);
printf("所得数为:%d\n", DigitSum(n));
system("pause");
return 0;
}
4 编写一个函数 reverse_string(char * string)(递归实现)
实现:将参数字符串中的字符反向排列。
要求:不能使用C函数库中的字符串操作函数。
#include <stdio.h>
#include <stdlib.h>
int strlen(char * str)
{
if (*str)
{
return 1 + strlen(str + 1);//后移,到零结束
}
return 0;
}
void reverse_string(char * string)
{
int end = strlen(string) - 1;
char tmp = string[0];
if (string[0])
{
string[0] = string[end];
string[end] = '\0';
reverse_string(string + 1);
string[end] = tmp;
}
}
int main()
{
char arr[] = "feichangkeai";
reverse_string(arr);
puts(arr);
system("pause");
return 0;
}
5.递归和非递归分别实现strlen
递归:
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
int strLen(char *str)
{
if (*str)
{
return 1 + strLen(str + 1);//后移,到零结束
}
return 0;
}
int main()
{
char str[] = "wozhenkeai";
printf("字符串长度为:%d\n", strLen(str));
system("pause");
return 0;
}
非递归:
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
int strLen(char *str)
{
int i;
for (i = 0; str[i]; i++)
;
return i;
}
int main()
{
char str[] = "wozhenkeai";
printf("字符串长度为:%d\n", strLen(str));
system("pause");
return 0;
}
6.递归和非递归分别实现求n的阶乘
递归:
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
int JC6(int n)
{
if (n == 1)
{
return 1;
}
else
return n*JC6(n - 1);
}
int main()
{
int n = 0;
printf("请输入你想要的阶乘数:");
scanf("%d",&n);
printf("结果:%d\n", JC6(n));
system("pause");
return 0;
}
非递归:
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
int JC6(int n)
{
int i = 1;
int tmp = 1;
for ( i = 1; i <= n; i++)
{
tmp = i*tmp;
}
return tmp;
}
int main()
{
int n = 0;
printf("请输入你想要的阶乘数:");
scanf("%d", &n);
printf("结果:%d\n", JC6(n));
system("pause");
return 0;
}
7.递归方式实现打印一个整数的每一位
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
PrintNum(int n)
{
if (n!=0)
{
PrintNum(n / 10);
printf("%d\n", n % 10);//1234
//PrintNum(n % 10);
//printf("%d\n", n / 10);//4321
}
}
int main()
{
PrintNum(1234);
system("pause");
return 0;
}