这是代码:
class qual
{
public static int fibonacci(int n)
{
if (n == 0 || n == 1)
{
return 1;
}
else
{
return fibonacci(n-1) + fibonacci(n-2);
}
}
public static void main(String[] arg)
{
System.out.println(fibonacci(5));
}
}Run Code Online (Sandbox Code Playgroud)
输出是8.输出应该是8但是当我看这个时我觉得它应该是7((5-1) +(5-2)).
为什么输出8?我认为获得8后面的推理会使递归可能不再让我感到困惑.
我认为允许递归有时候非常方便,不是因为我可以在"递归"中编码,而是因为我可以为某些情况保存一些代码空间,如下所示
public class SomeClass
{
private int a;
SomeClass(int a)
{
this.a = a;
}
SomeClass()
{
SomeClass(3);
}
}
Run Code Online (Sandbox Code Playgroud)
当一个构造函数试图利用包含大块代码的另一个构造函数时,这尤其有效.
但是,Java显然不支持这个功能,我相信它并不是一个很好的理由.有人可以解释为什么吗?
#Calculates to the index position of a fib number.
def f3(n):
if n < 2:
return n
return f3(n-2) + f3(n-1)
Run Code Online (Sandbox Code Playgroud)
该函数只接受一个参数,但在返回中发送了两个参数,但是,它有效!这里发生了什么事?
如果我返回f3(n-3),则该函数会崩溃.串联有什么影响?
可能重复:
此代码中发生了什么?
我有一个包含递归函数的代码.我在递归上浪费了很多时间,但我仍然无法得到它,真的:
#include<stdio.h>
count(int);
main(){
int x=10,z;
z=count(x);
}
count(int m){
if(m>0)
return count(m-1);
}
Run Code Online (Sandbox Code Playgroud)
当count第一次使用参数调用时10,它满足条件并且递归开始.当函数调用自身时会发生什么?我不懂.该陈述return count(m-1)是什么意思?它在哪里转移控制?
所以我正在学习如何在Haskell中编程.
我希望看到的一件事是通过使用map并使用不使用列表推导而不使用map或任何其他高阶库函数的递归,为列表的每个元素添加1.
我认为看到两种实施方式都很酷.
简单的问题,我只是想知道在循环中递归调用方法是否被认为是糟糕的风格.我知道人们因为时间和空间的成本而存在递归问题,所以我认为循环和重复会被认为更加低效和昂贵.
我知道有多种方法可以计算整数的阶乘,也有一个math模块.但是我试图将一个返回错误结果的简单函数放在一起.我很想知道这里出了什么问题.例如,如果我将2作为参数传递它返回3,如果3则返回8.
>>>def factorial(n):
if n > 0:
result = n * n-1
factorial(n-1)
return result
>>>factorial (2)
3
Run Code Online (Sandbox Code Playgroud)
我怎样才能解决这个问题?
编写一个递归的,布尔值的方法containsVowel,它接受一个字符串,如果该字符串包含一个元音,则返回true.一个字符串包含一个元音如果:字符串的第一个字符是一个元音,或者字符串的其余部分(超出第一个字符)包含一个元音这是我的编程实验室这是我有的编译器sas有一个元音错误,它没有提供帮助.
请帮我纠正错误,谢谢.
boolean containsVowel(String s)
{
if(s.containsVowel("aeiouAEIOU"))
{
return true;
}
else
{
(s.substring(!=));
return false
}
}
Run Code Online (Sandbox Code Playgroud)
编译器错误
codelab分析
备注:您似乎在编译时出错
这是我之前做过的另一个问题:
编写一个递归的,int -valued方法len,它接受一个字符串并返回字符串中的字符数.如果字符串是空字符串(""),则字符串的长度为:0.比第一个字符之外的其余字符串的长度多1个.
以下是我的编程实验室正在寻找的答案:
int len(String s)
{
if(s.equals("")){
return 0;
}
else {
return (1+len(s.substring(1)));}
}
Run Code Online (Sandbox Code Playgroud) 我正在尝试获得如下所示的输出:
3
2
1
"重启"
1
2
3
:递归使用此代码:
public static void restart(int n){
return; //fill in here
}
Run Code Online (Sandbox Code Playgroud) 我目前正在尝试使用递归将基数提高到 2 的幂,然后将其提高到指数,所以它看起来像x^2^y.
这是我的代码:
def real_multiply(x:int, y:int):
if y == 0:
return x
else:
return x * real_multiply(x,(2**y)-1)
Run Code Online (Sandbox Code Playgroud)
基本情况y==0是2^0返回 1,输出最终是x^1,这将返回x。但是,当我运行此代码时,它会达到递归限制。
有任何想法吗?