LINUX.ORG.RU

помогите

Linu
() автор топика

Зря ссылку дал, тут эту гадость не любят. И да, разве факториал - это сумма?

vurdalak ★★★★★
()

тут без лиспа не обойтись, а если все-таки на bash, то как-то так:

#!/bin/bash

function factorial() {
    if [ $1 -eq 1 ]; then
        return 1
    fi

    (( tmp= $1 -1 ))
    factorial $tmp
    partial=$?
    res=$(( $partial * $1 ))
    return $res
}

let sum=0

for i in `seq 6`
do
	factorial $i
	let sum=$sum+$?
done 

echo $sum

но я с башем не дружу

aho
()
Ответ на: комментарий от aho

ес-но это решение хоть и вроде рабочее, но не оптимальное, просто как пример

aho
()
Ответ на: комментарий от aho

> тут без лиспа не обойтись

Некоторые упертые считают, что такие задачи надо решать на хаскеле.

dave ★★★★★
()

Я тоже не спец в bash, получилась такая хрень:

panda-pc:/tmp # cat zzz.sh
n=$1

p=1
s=«»

for ((i=1;i<=n;i++)); do
p=$((p*i))
s=$((s+p))
done

echo $s
panda-pc:/tmp # bash zzz.sh 1
1
panda-pc:/tmp # bash zzz.sh 2
3
panda-pc:/tmp # bash zzz.sh 3
9
panda-pc:/tmp # bash zzz.sh 4
33

Murr ★★
()
Ответ на: комментарий от dave

Но максимальной производительности, конечно, можно добиться только на ассемблере.

shoewreck
()

Можно сделать, чтбы скрипт подсчёта рекурсивно вызывал себя. Вот веселья-то будет.

melkor217 ★★★★★
()

Вброс

@echo off
call :factorial %1
echo %RESULT%
exit
:factorial
if %1 == 0 (
    set RESULT=1
    exit /b
)
if %1 == 1 (
    set RESULT=1
    exit /b
)
set /a PARAM=%1 - 1
call :factorial %PARAM%
set /a RESULT=%1 * %RESULT%
exit /b
wintrolls ☆☆
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.