递归算法
1、一个人赶着鸭子去每个村庄卖,每经过一个村子卖去所赶鸭子的一半又一只。这样他经过了七个村子后还剩两只鸭子,问他出发时共赶多少只鸭子?经过每个村子卖出多少只鸭子?
题目分析:
递归终止的条件是到第7个村庄时递归停止
算法构造:
定义递归函数f(n), 当 n=8时,剩余2只鸭子,;当 0<n<8时,总共赶num =(f(n+1)+1)*2只鸭子,卖出num/2+1只鸭子
程序代码:
//题目:递归算法解决卖鸭子问题
//作者 :软工1508010206 白瑜
//时间 : 2017/05/20
#include <stdio.h>
int f(int n)
{ int num;
if(n==8)//第7个村子过后,也就是到第八个村子时还有2只鸭子
{
return 2;
}
else {
num =(f(n+1)+1)*2; //递归调用
printf("第%d个村子卖鸭子%d只\n",n,num/2+1);
}
return num;
}
int main()
{ int num = f(1);
printf("总共赶鸭子%d个\n",num); return 0;
}
运行结果截屏:
2、角谷定理。输入一个自然数,若为偶数,则把它除以2ÿ