1.求第n个斐波那契数
方法1:递归
#include "stdio.h"
int fib(int m)
{
if (m <= 2)//1
{
return 1;
}
else //大于2时,例1,1,2,3
{
return fib(m - 1) + fib(m - 2);//fib(3)+fib(2)
}
}
int main()
{
int n = 0;
int ret = 0;
printf("请输入n的值:\n");
scanf_s("%d", &n);
ret = fib(n);
printf("%d", ret);
system("pause");
return 0;
}
方法2:非递归
#include "stdio.h"
int main()
{
int i = 1;
int j = 1;
int sum = 0;
int k = 0;
int n = 0;
printf("请输入n的值:");
scanf_s("%d", &n);//1,1,2,3
for (k = 2; k<= n; k++)
{
sum = i + j;//1+1=2
i = j;
j = sum;
}
printf("%d", sum);
system("pause");
return 0;
}
2.编写一个函数实现n^k,使用递归实现
#include "stdio.h"
int fac(int n,int k)
{
if (k ==0)
return 1;
else
{
return n*fac(n, k - 1);
}
}
int main()
{
int n = 0;
int k = 0;
int ret = 0;
printf("请输入n值:\n");
scanf_s("%d\n", &n);
printf("请输入k值:\n");
scan_f("%d\n", &k);
ret = fac(n, k);
printf("%d", ret);
system("pause");
return 0;
}
3. 写一个递归函数DigitSum(n),输入一个非负整数,返回组成它的数字之和,
#include "stdio.h"
int Dignum(int k)
{
if (k <= 9)
return k;
else
return Dignum(k / 10) + k % 10;//1719-->171+9-->17+1+9-->1+7+1+9
}
int main()
{
int n = 0;
int ret = 0;
printf("请输入n值:\n");
scanf_s("%d\n", &n);
ret = Dignum(n);
printf("%d", ret);
system("pause");
return 0;
}
4. 编写一个函数reverse_string(char * string)(递归实现)
实现:将参数字符串中的字符反向排列。
要求:不能使用C函数库中
的字符串操作函数。
#include "stdio.h"
#include "assert.h"
void reverse_string(char *str,int len)//将abcdef->fedcba
{
assert(str);
char tmp= 0;
if (len > 0)
{
tmp = str[0];//将第一个字符先赋给tmp
str[0] = str[len];//将最后一个字符赋给第一个 --》fabcd
str[len] = '\0';//递归调用,限制条件len>0 ,每次调用的变化str++;
reverse_string(str +1,len);
str[len] = tmp;
}
}
int main()
{
char arr[] = "abcdef";
int sz = sizeof(arr)/sizeof(arr[0]);
printf("逆序之后为:\n");
reverse_string(arr,sz-1);
printf("%s\n", arr);
system("pause");
return 0;
}
5.递归和非递归分别实现strlen
方法一:递归
#include "stdio.h"
#include "assert.h"
int my_strlen(char*p)
{
assert(p);
if (*p == '\0')
{
return 0;
}
else
{
return 1 + my_strlen(p+ 1);
}
}
int main()
{
char *str = "abcdef";
int ret = 0;
printf("字符串长度为:\n");
ret=my_strlen(str);
printf("%d\n",ret );
system("pause");
return 0;
}
方法二:非递归
int my_strlen(char*p)
{
assert(p);
int count = 0;
while (*p)
{
count++;
p++;
}
return count;
}
6.递归和非递归分别实现求n的阶乘
方法一:递归
#include "stdio.h"
#include "assert.h"
int fac(int n)
{
if (n == 1)
return 1;
else
return n*fac(n - 1);
}
int main()
{
int num = 0;
int ret = 0;
printf("输入n值:\n");
scanf_s("%d", &num);
ret = fac(num);
printf("%d\n", ret);
system("pause");
return 0;
}
方法二:非递归
int fac(int n)
{
int i = 0;
int tmp = 1;
for (i = 1; i <= n; i++)
{
tmp = i*tmp;
}
return tmp;
}
7.递归方式实现打印一个整数的每一位
#include "stdio.h"
#include "assert.h"
void print(int n)//假设数字为345
{
if (n > 9)//符合条件,print(345)
{
print(n / 10);//递归调用print(34)保留输出9 第二次递归调用 print(3) 保留输出4
}
printf("%d ", n % 10);
}
int main()
{
int n= 0;
printf("请输入一个数;\n");
scanf_s("%d", &n);
print(n);
system("pause");
return 0;
}
1665

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



