一、编写递归函数求两个正整数a和b的最大公约数(GCD, Greatest Common Divisor) ,使用Euclid算法:
1. 如果a除以b能整除,则最大公约数是b。
2. 否则,最大公约数等于b和a%b的最大公约数。
递归函数实现如下:
#include<stdio.h>
int GCD(int a,int b)
{
int result;
if(a%b==0)
{
result = b;
return result;
}
else
{
result = GCD(b,a%b);
return result;
}
}
int main(void)
{
printf("gcd is :%d\n",GCD(10,5));
return 0;
}
循环方法实现如下:
#include<stdio.h>
int gcd_loop(int a,int b)
{
int result;
int temp;
if (a%b==0)
{
result = b;
return result;
}
else
while((a%b)!=0)
{
a = b;
temp = a%b;
b = temp;
}
}
int main(void)
{
printf("gcd:%d\n",gcd_loop(10,5));
return 0;
}
二、编写递归函数求Fibonacci数列的第n项,这个数列是这样定义的:
fib(0)=1
fib(1)=1
fib(n)=fib(n-1)+fib(n-2)
1、用递归函数实现:
#include<stdio.h>
int Fibonacci(int n)
{
int result;
if (n==0 || n==1)
{
result = 1;
return result;
}
else if(n>0)
{
result = Fibonacci(n-1) + Fibonacci(n-2);
return result;
}
}
int main(void)
{
int n;
for(n=1; n<=15 ; n++)
printf("%ld\n",Fibonacci(n));
return 0;
}
2、用循环方法实现:
#include<stdio.h>
int Fibonacci_loop(int n)
{
int temp = 0;
int a=1;
int b=1;
int i=0;
// for(i=0;i<n;i++)
while(i<n)
{
if(i==0)
{
temp = 1;
i=i+1;
}
else
{
temp=a+b;
a = b;
b = temp;
i=i+1;
}
// return temp; //返回值的位置应该在函数中,表示函数结束并返回相应的值,而不能放到分支语句中,不然函数一直无法完成
}
// i=i+1;
return temp;
}
int main(void)
{
printf("%d\n",Fibonacci_loop(15));
return 0;
}