递归与分治题目

递归问题
例1 Fibonacci数列

int fibonacci(int n){      
if (n <= 1) return 1;     
return fibonacci(n-1)+fibonacci(n-2);
}

例2 汉诺塔问题(移动路径)

void move(char from ,char to) {
cout<<“Move “<<from<<“to”<<to<<endl;
 }
void hanoi(int n, char first, char
second,  char third) {        
if(n==1)     
move(first,third);    
else{      
hanoi(n-1,first,third,second);        尤为注意实参和形参的对应关系
move(first,third);       
hanoi(n-1,second,first,third);     
}
 }

实例化
int main(){   
int m;
cout<<“the number of diskes:";   
cin>>m;  
cout<<"move 
“<<m<<“ 
diskes:\n";   
hanoi(m,'A','B','C');
}




结果:

the number of diskes:3
move 3  diskes:
Move A to  C
Move A to  B
Move C to  B
Move A to  C
Move B to  A
Move B to  C
Move A to  C
Press any key to continue


例3 猴子吃桃
猴子第一天采摘了一些桃子,第二天吃了第一天的一半多一个,第三天吃了第二天的一半多一个…直到第十天就剩下一个。问:猴子第一天摘了多少桃子?

 #include <iostream>
 using namespace std;
 int func(int day){
     if(day==10)
         return 1;                                                  //终止条件很重要
     else
         return (func(day+1)+1)*2;         //找到依赖关系很重要
 }
 int main(){
     cout<<"第一天有%d个桃子!"<<func(1)<<endl;
     return 0;
 }

例4 进制转换
编写一个递归函数,将10进制转化成radix进制(输出二进制形式)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值