C程序递归函数
我有一个小问题,我想构建一个函数,用递归函数返回nn表达式,调用函数中有一个参数。有人能帮我吗?到目前为止,我的想法是: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!
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);
}
}