繁体   English   中英

在C ++上使用递归函数计算功效

[英]Calculate power with a recursive function on C++

我需要制作一个使用递归函数计算给定数字幂的程序。 我写了这个,但是我无法使用它,一旦我接触到函数本身就会崩溃。 有什么帮助吗? 谢谢。

#include"stdafx.h"
#include<stdio.h>
#include<iostream>

using namespace std;

float power(float a, unsigned int b);

int main()
{

    float a = 0;
    unsigned int b = 0;

    cout << "Insert base - ";

    cin >> a;

    cout << "Insert index - ";

    cin >> b;

    float result;

    result = power(a, b);

    cout << result;

    return 0;
}

float power(float a, unsigned int b)
{

    if (b <= 0)
    {
        return a; 
    }

    return (a*power(a, b--));
}

取而代之的b--你需要b-1--b

b--b减一,这是无效的,因为b该实例不再被使用。 它递归地传递b的未归约副本。

同样,当b为零时,结果应为1而不是a

if ( b <= 0) return 1;
return a * power(a, --b);

但是这个问题问了很多次了。

递归函数查找数字的幂

每当我们考虑递归时,首先想到的应该是停止标准。 接下来要考虑的是,不使用堆栈就无法进行递归。 说了这么多,让我们看看我们如何能够实现这个功能。

停止条件

X ^ 0 = 1

展开堆栈

基数可以提高为正或负实数。 让我们将问题限制为整数。

  • 如果A是基数,B是幂,则第一步,取B的绝对值。
  • 其次,将A存储在堆栈中并递减B。重复直到B = 0(停止标准)。 将结果存储在堆栈中。
  • 第三,通过展开堆栈来乘以所有存储的A。

现在的代码

float power(float a, int b)
{
    int bx = -b ? b < 0 : b;
    if (bx == 0)
    {
        a = 1;
        return a;
    }
    return 1/(a*power(a, --bx)) ? b < 0 : (a*power(a, --bx));
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM