1.用递归和非递归实现求第n个斐波那契数
非递归实现
1.创建一个一维数组,并定义第一个和第二个元素为1,。
2.然后其余元素为他之前的两个元素之和,从第三个元素开始一直计算到第n个数
3.如果n<3,那么直接返回1,当n>=3时,返回数组下标为n-1的元素
#include<stdio.h>
#define N 100
int ASD(int *arr, int x)
{
int i = 2;
if(x<3)
{
return 1;
}
while(i < x)
{
arr[i] = arr[i-1]+arr[i-2];
i++;
}
return arr[i-1];
}
int main()
{
int a[N] = {1,1};
int n = 0;
int c = 0;
scanf("%d", &n);
c = ASD(a,n);
printf("%d", c);
return 0;
}
递归实现
#include<stdio.h>
#include<stdlib.h>
int Asd(int x)
{
if(x <= 2)
{
return 1;
}
else
{
return Asd(x-1)+Asd(x-2);
}
}
int main()
{
int a = 0;
int n = 0;
scanf("%d", &n);
a = Asd(n);
printf("%d", a);
system("pause");
return 0;
}
2.用递归实现n 的k次方
#include<stdio.h>
#include<stdlib.h>
int Power(int n, int k)
{
if(k==1)
return n;
else
return n*Power(n, k-1);
}
int main()
{
int x = 0;
int y = 0;
int z = 0;
printf("请输入一个数\n");
scanf("%d", &x);
printf("请输入这个数的次方数\n");
scanf("%d", &y);
z = Power(x, y);
printf("%d\n", z);
system("pause");
return 0;
}
3.递归计算一个非负整数的每一位相加之和,比如调用1234,输出为1+2+3+4=10
#include<stdlib.h>
#include<stdio.h>
int Sum(int n)
{
if(n == 0)
return 0;
else
return n%10+Sum(n/10);
}
int main()
{
int x = 0;
int y = 0;
printf("请输入一个数\n");
scanf("%d", &x);
y = Sum(x);
printf("%d\n", y);
system("pause");
return 0;
}
4.递归实现将一个字符串反向排列(不能使用c库函数中的字符串操作函数)
#include<stdio.h>
#include<stdlib.h>
int n_strlen(char arr[])//计算字符串个数
{
int i = 0;
do
{
i++;
}while(arr[i]);
return i-1;
}
int gui(char *b)
{
if(*b == '\0')
{
return 0;
}
else
{
int c = n_strlen(b);
char a = *b;
*b = *(b+c);
*(b+c) = '\0';
gui(b+1);
*(b+c) = a;
}
return 0;
}
int main()
{
char a[] = "ASDFGHJK";
int s = strlen(a);
gui(a);
printf("%s", a);
system("pause");
return 0;
}
5.用递归和非递归实现strlen
递归实现
#include<stdlib.h>
#include<stdio.h>
int My_strlen(char *a)
{
if(*a == '\0')
return 0;
return 1+My_strlen(a+1);
}
int main()
{
int i = 0;
char a[] = "ASDFGHJK";
i = My_strlen(a);
printf("%d\n", i);
system("pause");
return 0;
}
非递归实现
#include<stdlib.h>
#include<stdio.h>
int My_strlen(char *a)
{
int i = 0;
while(a[i] != '\0')
{
i++;
}
return i;
}
int main()
{
int s = 0;
char a[] = "ASDFGHJK";
s = My_strlen(a);
printf("%d\n", s);
system("pause");
return 0;
}
6.递归和非递归实现n的阶乘
递归实现
#include<stdio.h>
#include<stdlib.h>
int C(int s)
{
if(1 == s)
{
return 1;
}
else
{
return s*C(s-1);
}
}
int main()
{
int n = 0;
int a = 0;
printf("请输入一个数\n");
scanf("%d", &n);
a = C(n);
printf("%d的阶乘为%d", n, a);
system("pause");
return 0;
}
非递归实现
#include<stdio.h>
#include<stdlib.h>
int main()
{
int n = 0;
int i = 0;
int x = 1;
printf("请输入一个数\n");
scanf("%d", &n);
for(i = 1; i <= n; i++)
{
x = x*i;
}
printf("%d\n", x);
system("pause");
return 0;
}
7.递归的方式打印整数的每一位
#include<stdio.h>
#include<stdlib.h>
void A(int n)
{
if(n > 9)
A(n/10);
printf("%d ", n%10);
}
int main()
{
int x = 0;
printf("请输入一个数\n");
scanf("%d", &x);
A(x);
system("pause");
return 0;
}