C程序递归函数

C程序递归函数,c,function,recursion,C,Function,Recursion,我有一个小问题,我想构建一个函数,用递归函数返回nn表达式,调用函数中有一个参数。有人能帮我吗?到目前为止,我的想法是: int powerThroughRecursion(int n) { if (n == 0) { return 1; } if (n <= 1) { return n; } return n * powerThroughRecursion(n - 1); } 是的,你实际上是在计算n!

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

int powerThroughRecursion(int n) {      
    if (n == 0) {
        return 1;
    }
    if (n <= 1) {
        return n;
    }
    return n * powerThroughRecursion(n - 1);
}

是的,你实际上是在计算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,但是一个步骤会告诉你需要做多少次乘法

[编辑]使用单参数功能


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

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

你能告诉我们你展示的功能有什么问题吗?对于某些特定的输入,实际和预期的结果是什么?您显示的代码的实际问题是什么?好的,我将用一个示例演示,如果您使用n=3调用函数,它应该返回27,但它返回6。我希望我帮助了您,我也尝试了使用函数中的一个变量,但没有帮助。不,抱歉,我想使用一个参数调用函数,@PatrykWajs不使用递归函数。我需要一个递归函数,这是一个练习,我可以用两个参数来解这个函数,但我在过去的3个小时里浪费了时间用一个参数来解它。我认为这是不可能的,我只是想对fact@PatrykWajs你能构建一个函数f,使得n^n=fn-1^n-1吗?如果答案是肯定的,那么它是可能的,否则它不是。对不起,我的朋友,但它是完全错误的,谢谢你的支持。哇,真的很神奇,谢谢你,你真的能解释我什么是程序和什么是静态的意思吗?如果你能,我将非常感激,谢谢you@PatrykWajs,您可以阅读有关静态的内容。程序只存储一个值,所有函数调用都可以看到它。我基本上是用这个普通变量先把n作为基数,然后作为指数。哇,真是太神奇了,我用一个参数做这个程序花了5个小时,真的谢谢你,我会研究这个程序来理解它,真的谢谢你^^@PatrykWajs,NP。然而,请注意,这是一个黑客,而不是质量代码。这受到所有全局变量问题的影响。
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);
    }
}