前言
"信仰之跃"与递归函数
一、递归与信仰之跃
Leap of Faith本身就是Leap(跳跃)的,不是吗? 如果你相信你正在写的递归函数是正确的,并调用它,然后在此基础上写完这个递归函数,那么它就会是正确的,从而值得你相信它正确。
二、课后习题答案
1.最大公约数Euclid
/* 题目 1、编写递归函数求两个正整数a和b的最大公约数(GCD, Greatest Common Divisor) ,使
* 用Euclid算法:
*
* 提示 1. 如果a除以b能整除,则最大公约数是b。
* 2. 否则,最大公约数等于b和a%b的最大公约数。
*
* 测试 通过4 16, 3 16; 16 4, 16 3
*/
#include <stdio.h>
int GCD(int a, int b);
int main(void)
{
int a,b;
printf("《求最大公约数》\n");
printf("请输入两个以空格间隔开的正整数:");
scanf("%d %d",&a,&b);
printf("输入的值为:%d和%d\n最大公约数为%d",a,b,GCD(a,b));
return 0;
}
int GCD(int a, int b)
{
if ( a%b==0 )
return b;
else {
a=a%b;
return GCD(b,a);
}
}
2.斐波那契数列
/* 题目 2、编写递归函数求Fibonacci数列的第n项,这个数列是这样定义的:
fib(0)=1
fib(1)=1
fib(n)=fib(n-1)+fib(n-2)
*
*
* 测试 OK fib(10)=89
*/
#include <stdio.h>
int Fib(int n);
int main(void)
{
int n;
printf("《求斐波那契数列第N项》\n");
printf("请输入n:");
scanf("%d",&n);
printf("第%d项斐波那契是:%d",n,Fib(n));
return 0;
}
int Fib(int n)
{
int result;
if (n==0)
return 1;
else if (n==1)
return 1;
else {
result=Fib(n-1)+Fib(n-2);
return result;
}
}
总结
递归结论+信仰之跃=递归函数