C程序递归函数

时间:2016-01-10 12:30:29

标签: c function recursion

我有一个小问题我想构建一个函数,该函数使用递归函数返回 n n 表达式,并在调用函数中使用一个参数。有人能帮我吗?到目前为止我的想法:

ArrayList

2 个答案:

答案 0 :(得分:2)

是的,你实际上在那里计算n!。一种方法是:

#include <iostream>
#include <string>

int powerThroughRecusion(int n, int step) {   
    if (step < 1)
        return 1;

    return n * powerThroughRecusion(n, step - 1);
}

int main()
{
  std::cout << powerThroughRecusion(4, 4);
}

你乘以n,但是一步将告诉你要进行多少次乘法。

[编辑]使用单个参数功能

#include <iostream>
#include <string>

int powerThroughRecusionInternal(int n, int step) {   
    if (step < 1)
        return 1;

    return n * powerThroughRecusionInternal(n, step - 1);
}

int powerThroughRecusion(int n)
{
   return powerThroughRecusionInternal(n, n);
}

int main()
{
  std::cout << powerThroughRecusion(2) << "\n";
  std::cout << powerThroughRecusion(4);
}

答案 1 :(得分:2)

如果你想要一个参数功能。只需用另一个函数调用隐藏和包装两个参数实现版本。

static int powerThroughRecusionImpl(int n, int power) {       
    if (power == 0) {
        return 1;
    }
    if (power == 1) {
        return n;
    }
    return n * powerThroughRecusionImpl(n ,power - 1);
}

int powerThroughRecusion(int n) {       
    return powerThroughRecusionImpl(n ,n);
}

或者如果你想要非线程安全的话。

int powerThroughRecusion(int n) {       
    static int base = 0;

    if (!base) {
      base = n;
      n = powerThroughRecusion(n);
      base = 0;
      return n;
    } else {
      if (n == 0) {
        return 1;
      } else if (n == 1) {
        return base;
      }
      return base * powerThroughRecusion(n - 1);
    }
}