بروز خطا
[message]
اشتراک در سوال
رای ها
[dataList]
درخواست راهنمایی در رابطه با الگوریتم فیبوناچی
با سلام و احترام؛
من با جستجو به الگوریتم زیر برخوردم نمیدونم دقیقاً دلیل استفاده از b چی هست میدونم عدد دوم هست ولی فقط تو جمع استفاده شده و متوجهش نمی شم ممنون میشم کسی راهنمایی کنه
// Usage
val n = 8
val first = BigInteger("0")
val second = BigInteger("1")
println(fibonacci(n, first, second))
Code
fun fibonacci(n: Int, a: BigInteger, b: BigInteger): BigInteger {
return if (n == 0) a else fibonacci(n-1, b, a+b)
}
برای این سوال 2 پاسخ وجود دارد.
مشاهده پاسخ صحیح
پاسخ به سوال
هادی اکبرزاده
5 سال پیش
+2
0
من این الگوریتمو به صورت زیر نوشتم:
fun fibonacci(n: Int): Int {
if (n == 0) {
return 0;
} else if (n == 1) {
return 1;
} else {
return (fibonacci(n-1) + fibonacci(n-2));
}
}
- خونه اول که صفره (n = 0)
- خونه دوم هم که یکه (n = 1)
- و اگه خونه دیگه رو بخواد، فیبونانچی دوتا خونه قبلیو جمع میکنیم که هربار به دو تا خونه قبلتر از خودش اشاره میکنه
پاسخ به سوال
mmz_133
5 سال پیش
+1
0
پاسخ صحیح
سلام دوست عزیز
برای نوشتن این الگوریتم لازم نیست که صفر و یک ورودی تابع باشه
فقط تعداد جمله دنباله رو به عنوان ورودی بگیرید
الگوریتمی که دوستمون هادی نوشتن درست کار میکنه ولی به جهت بازگشتی بودن و تکرار محاسبه فیبوناچی از نظر پیچیدگی زمانی اصلا منطقی نیست و وقتی عدد بزرگتر بشه به مشکل برمیخوره
من این رو پیشنهاد می کنم :
fun fib(n: Int): Int {
var fib = Array(n+1, {i->(0)})
if(n<2) return n
fib[0]=0
fib[1]=1
for (i in 2..n){
fib[i] = fib[i-1] + fib[i-2]
}
return fib[n]
}
البته به این صورت هم میشه نوشت
fun fib2(n: Int): Int {
if(n<=1) return n
var num1 = 0
var num2 = 1
var nextNum=0
for(i in 2..n){
nextNum = num1 + num2
num1 = num2
num2 = nextNum
}
return nextNum
}
پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .