zoukankan      html  css  js  c++  java
  • 每日一小练——数值自乘递归解

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


    题目:数值自乘递归解


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


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


    #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);
    }
    

    实验结果



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

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


                -End-

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



  • 相关阅读:
    455. Assign Cookies(分饼干)(leetcode)
    栈的压入、弹出序列 (剑指offer)
    第五届蓝桥杯c/c++B组1
    第六届蓝桥杯试题c/c++B组8
    第六届蓝桥杯试题c/c++B组7
    第六届蓝桥杯试题c/c++B组6
    第六届蓝桥杯试题c/c++B组5
    第六届蓝桥杯试题c/c++B组4
    第六届蓝桥杯试题c/c++B组3
    第六届蓝桥杯试题c/c++B组2
  • 原文地址:https://www.cnblogs.com/mengfanrong/p/3763229.html
Copyright © 2011-2022 走看看