码迷,mamicode.com
首页 > 其他好文 > 详细

每日一小练——数值自乘递归解

时间:2014-05-22 08:32:25      阅读:270      评论:0      收藏:0      [点我收藏+]

标签:c++   每日一小练   学习   算法   乘法   

上得厅堂,下得厨房,写得代码,翻得围墙,欢迎来到睿不可挡的每日一小练!


题目:数值自乘递归解


内容:如果一个n与m是正整数,那么m^n就是把m连乘n次,这是一个很没有效率的方法。试试编写一个更有效率的程序,应该以少量n-1个乘法作为设计标准。


我的解法:上来没多想,打开vs2013就敲了起来,问题果然很简单,分分钟就超神。。奥,不对就解决了!解决递归的问题,其实关键在于找到合理的递归公式,公式只要找到问题就迎刃而解了。这个题目说的是自乘,所以底数是不变的,指数上无非就3中情况,奇数,偶数和零。奇数减一可得偶数,偶数除二可奇可偶,高次的结果可以用低次的结果表示,最后的出口在零,所以这是很简单的递归形式公式如下:

bubuko.com,布布扣

#include <iostream>
using namespace std;

int _tmain(int argc, _TCHAR* argv[])
{
	int recursion(int base, int index);
	int base, index;
	cout << "请输入底数:" << endl;
	cin >> base;
	cout << "请输入指数:" << endl;
	cin >> index;
	cout << base << "的" << index << "次方为:" << recursion(base, index) << endl;
	getchar();
	getchar();
	return 0;
}

int recursion(int base, int index)
{
	int temp;
	if (index == 0)
		return 1;
	else if (index & 0x01 == 0)
	{
		temp = recursion(base, index >> 1);
		return temp * temp;
	}
	else
		return base * recursion(base, index - 1);
}

实验结果

bubuko.com,布布扣


欢迎大家加入每日一小练,嘿嘿!

每天练一练,日久见功夫,加油!


            -End-

参考文献:《c语言名题精选百则》



每日一小练——数值自乘递归解,布布扣,bubuko.com

每日一小练——数值自乘递归解

标签:c++   每日一小练   学习   算法   乘法   

原文地址:http://blog.csdn.net/zhurui_idea/article/details/26220753

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!