1.递归和非递归分别实现求第n个斐波那契数。
#include <stdio.h>
#include<stdlib.h>
int fab(int n)
{
int a = 1;
int b = 1;
int c = 0;
if (n <= 2)
return 1;
while (n >2)
{
c = a + b;
a = b;
b = c;
n--;
}
return c;
}//非递归
int fib(int n)
{
if (n <= 2)
return 1;
else
return fib(n - 1) + fib(n - 2);
}//递归
int main()
{
int x=0 ;
scanf_s("%d\n", &x);
printf("%d\n", fab(x));
printf("%d\n", fib(x));
system("pause");
}
2.编写一个函数实现n^k,使用递归实现
#include <stdio.h>
#include<stdlib.h>
int mi(int n,int k)
{
if (k==0)
return 1;
else if (k==1)
return n;
else
renturn mi( n,k-1)*mi(n,1);
}
int main()
{
int x = 2;
int y = 3;
printf("%d\n",mi(x ,y));
system("pause");
}
- 写一个递归函数DigitSum(n),输入一个非负整数,返回组成它的数字之和,
例如,调用DigitSum(1729),则应该返回1+7+2+9,它的和是19
#include <stdio.h>
#include<stdlib.h>
int DigitSum(int n)
{
if (n<10)
return n;
else if (n >= 10 && n<100)
{
int a = 0;
int b = 0;
a = n / 10 % 10;
b = n % 10;
return a + b;
}
else
return DigitSum(n / 10) + n % 10;
}
int main()
{
int n = 1729;
printf("%d\n",DigitSum(n));
system("pause");
}
- 编写一个函数 reverse_string(char * string)(递归实现)
实现:将参数字符串中的字符反向排列。
要求:不能使用C函数库中的字符串操作函数。
#include <stdio.h>
#include<stdlib.h>
#include <stdio.h>
#include<stdlib.h>
char * reverse_string(char *p){
int n = 0;
char temp;
char *q;
q = p;
while (*p != 0){
n++;
p++;
}
if (n > 1)
{
temp = q[0];
q[0] = q[n - 1];
q[n - 1] = '\0';
reverse_string(q + 1);
q[n - 1] = temp;
}
return q;
}
int main()
{
char p[] = "abcd";
printf("原字符串是:%s\n", p);
printf("翻转后的字符串是:%s\n", reverse_string(p));
system("pause");
return 0;
}
5.递归和非递归分别实现strlen .
#include <stdio.h>
#include<stdlib.h>
int longe(char *str)
{
int count = 0;
while (*str != 0)
{
count++;
str++;
}
return count;
}
//非递归
int string(char*x)
{
int count = 0;
if (*x != 0)
{
count = 1 + string(x+1);
}
return count;
}
int main()
{
char a[] = "abcde";
printf("%d\n", longe(a));
printf("%d\n", string(a));
system("pause");
}
6.递归和非递归分别实现求n的阶乘
#include <stdio.h>
#include<stdlib.h>
int fac(int n)
{
int a = 1;
if (n == 0)
return 0;
else if (n == 1)
return 1;
else
for (int i = 1; i <= n; i++)
{
a = a*i;
}
return a;
}//非递归
int fac1(int n)
{
if (n == 0)
return 0;
else if (n == 1)
return 1;
else
return n* fac(n - 1);
}//递归
int main()
{
int n = 3;
scanf_s("%d\n", &n);
printf("%d\n", fac(n));
printf("%d\n", fac1(n));
system("pause");
}
7.递归方式实现打印一个整数的每一位
#include <stdio.h>
#include<stdlib.h>
int out(int n)
{
if (n<10)
printf("%d\n",n);
else if (n >= 10)
{
out(n / 10);
printf("%d\n", n % 10);
}
}
int main()
{
printf("请输入一个数\n");
int a = 0;
scanf_s("%d",&a);
out(a);
system("pause");
}