递归和非递归分别求第N个斐波那契数
循环写法:
#include<stdio.h>
#include<stdlib.h>
int fib(int x)
{
if (x== 1 || x == 2)
{
return 1;
}
int last3 = 1;//倒数第三项
int last2 = 1;//倒数第二项
int a=0;//最后一项
for (int n = 3; n <= x; ++n)
{
a = last3 + last2;//最后一项等于前两项之和
last3 = last2;//新的倒数第三项
last2 = a;//新的倒数第二项
}
return a;
}
int main()
{
int num=0;
scanf("%d",&num);
int a=fib(num);
printf("%d\n",a);
system("pause");
return 0;
}
递归写法:
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
int count = 0;
int fib(int x)
{
if (x == 1 || x == 2)
{
return 1;
}
return fib(x - 1) + fib(x - 2);
}
int main()
{
int a=0;
scanf("%d",&a);
int b = fib(a);
printf("%d\n", b);
system("pause");
return 0;
}
编写一个函数实现n^k,使用递归实现
#include<stdio.h>
#include<stdlib.h>
int nk(int n,int k)
{
if (k == 1)
{
return n;
}
return n*nk(n,k-1);
}
int main()
{
int a, b;
scanf("%d %d", &a, &b);
int c=nk(a, b);
printf("%d\n", c);
system("pause");
return 0;
}
写一个递归函数DigitSum(n),输入一个非负整数,返回组成它的数字之和
例如,调用DigitSum(1729),则应该返回1 + 7 + 2 + 9,它的和是19
#include<stdio.h>
#include<stdlib.h>
int DigitSum(int x)
{
int j = 0;
if (x < 10)
{
return x;
}
return x%10 + DigitSum(x / 10);
}
int main()
{
int n = 0;
scanf("%d", &n);
int a=DigitSum(n);
printf("%d\n", a);
system("pause");
return 0;
}